13、多分支+循环+循环嵌套

多分支
case 变量名/表达式 in
value1|value2)
    commands1
    ;;
value3)
    commands2
    ;;
     value4)
    command3
    ;;
[*)
    defaults commands
    ;;]
    esac
 

作用:计算变量名/表达式的值,然后与下面的 value 支匹配,与哪个匹配到(相等),就

       执行其下的commands ,如果所有的都没匹配到,
       有*就执行defaults commands 段
   
 
    例:写一个菜单程序,给几个选项
      1) 显示当前用户
      2) 显示内存信息
 3) 显示磁盘信息
      
if 多分支
     if [ condition1 ]
then
    commands1
elif [ condition2 ]
then
    commands2
elif [ condition3 ]
then
    commands3
elif [ condition4 ]
then
    commands4
else
    commands
fi
 
  练习:把象限的程序用if 多分支实现
 
 
for 遍历循环
    格式:
for 变量名 in value1 value2 value3 ... valueN
do
commands
done
 
 
如果遍历值很多可以
for 变量名 in $(seq 起始值 步长 终值)
do
commands
done
 
 
    作用:变量在 value1 到 valueN 之间遍历,每次取一个值,每取一个值执行一次循环体
      值取完循环也就结束了
  
  
例:用for 求 1+2+3+...+50
 
例:用for 遍历求 /etc/下有多少目录
   
for i in /etc/*
do
done
 
 
C式for 循环
格式:for ((i=0;i<=100;i++))
     do
commands
 
     done
 
while 循环
  格式: while [ condition ]
      do
    commands
      done
 
例:n=1
   while [ $n -le 5 ]
   do
echo -n "*"
        n=$[$n+1]
   done
 
 
   打印 *****
 
 
        例:打印 1-10 内的偶数
 
n=2
while [ $n -le 10 ]
do
         echo $n
         n=$[$n+2]
done
 
 
n=1
while [ $n -le 10 ]
do
         if [ $n%2 -eq 0 ]
         then
                 echo $n
         fi
         n=$[$n+1]
done
 
       
 
 
 
例:求 20 内能同时被2和3整除的数之和
       s=0
n=1
while [ $n -le 20 ]
do
         if [[ $n%3 -eq 0 && $n%2 -eq 0 ]]
         then
                 s=$[$s+$n]
         fi
         let n+=1
done
echo "s=$s"
 
 
until 循环
    格式:
 until [ condition ]
 do
 
commands;
 done
作用:condition 是否成立,不成立,执行循环体,成立里終止。
    例:打印 1-10 内的偶数
n=1
until [ $n -gt 10 ]
例:通过循环创建三个用户,用户名从键盘输入,密码与用户名相同
   改密: echo $user | passwd $user --stdin
 
 
死循环
一般来讲死循环是要避免的,但在有些情况下,可能会刻意使用死循环,
构建死循环:
while true
do
[
if [ condition ]
then
break    --在必要的时候给程序留个出口
fi
]
 
[sleep 3]        --在有些情况下,要給程序停止时间
done
 
 
例:写个程序监控vsftpd 是否正常运行,如果服务器停止了的话,启起来
while true
do
         if ! ....
         then
                 service vsftpd start
         fi
 
         sleep 3
done
 
    例:写个程序,由用户输入用户名,直到输入的用户不存在,才退出
 
循环嵌套
   while
     do
 
while
do
 
 
 
done
 
 
 
     done
 
例:写个程序,打印
 
*
**
***
****
*****
 
*****        
****
***
**
*
 
 
作业:
    写个程序,打印
 
    *      
   **
  ***
 ****
*****
 
*****    
 ****
  ***
   **
    *
 
 
    *
   ***
  *****
 *******
*********
 
 
 
 
 
 
 
 
 
posted @ 2019-08-10 12:44  Paco_Pig  阅读(496)  评论(0编辑  收藏  举报