shell控制结构
if
语句格式:
#简单的if语句
if condition
then
statements
fi
#带有else的if语句
if condition
then
statements
else
statements
fi
#带有elif也就是else if的if语句
if condition
then
statements
elif condition
then
statements
else
statements
fi
如果你想简化,不写那么些行,可以把 then
放到 if
或 elif
里:
if condition;then
statements
elif condition;then
statements
fi
下面是一个例子:
#!/bin/bash
echo "你叫小李吗?敲Y是,敲N不是"
read answer
if [ "$answer" = "Y" ];then
echo "是啊,我是小李"
elif [ "$answer" = "N" ];then
echo "不是,你找错人了"
fi
sleep 2
exit 0
注意:
- 因为
answer
可能为空,所以需要用双引号括起,否则如果answer
是空,会解析成if [ = "Y"]
,结果bash会报test出现语法错误。[ ]
等价于test
,也就是说[ "$answer" = "Y" ]
等价于test "$answer" = "Y"
for
语句格式:
#python里的链表,in右边是链表
for item in item1 item2 item3[...]
do
#下面的语句可以引用item变量
statements
done
举个例子
for name in "小王" "小李" "小张"
do
echo $name "来了,快跑!"
done
#该脚本会找出当前目录所有后缀为sh的文件,并显示数量
#count用于计数
count=0
for file in $(ls *.sh);do
echo $file
count=$(($count+1))
done
echo $count
三步当作两步走
cd /var/log
ls -il
可以并作一个语句:cd /var/log;ls -il
所以
for item in item1 [...];do
....
while
语句格式:
while condition
do
statments
done
举个例子
# 1到100的所有自然数的和
total=0
num=1
while [ $num -le 100 ];do
total=$(($total+$num))
num=$(($num+1))
done
提示:
$(())
用于简单的数学算法,优于使用expr,因为expr会启用另一个shell,效率低。
until
类似于while,只不过当条件不成立时才进入循环,条件成立时终止循环。
举个栗子:
#当有simon用户登陆时,才打铃、提示欢迎信息
until who|grep 'simon'>/dev/null;do
sleep 60#60秒检查一次
done
echo \\a#打铃
echo "哈,欢迎你"#欢迎信息