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
例:写个程序,打印
*
**
***
****
*****
*****
****
***
**
*
作业:
写个程序,打印
*
**
***
****
*****
*****
****
***
**
*
*
***
*****
*******
*********