语法规则上会有一点点变化
##Shell流程控制
##if else
if condition
then
command1
command2
...
commandN
else
command
fi
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
## if else-if else
if condition1
then
command1
elif condition2 ##elif关键字
then
command2
else
commandN
fi
##简单举例
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
##结果a 小于 b
## if else 经常与test命令一起使用
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
##for循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
for var in item1 item2 ... itemN; do command1; command2… done;
##在之前的学习中有相似的列子
#除了这种循环用法还可以
for((i=1;i<=5;i++));do
echo "这是第 $i 次调用";
done;
##与 C 中相似,赋值和下一步执行可以放到代码之前循环语句之中执行,这里要注意一点:如果要在循环体中进行 for 中的 next 操作,记得变量要加 $,不然程序会变成死循环。
##while语句
#!/bin/sh
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
#输出从1到5的数值
##Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令
#用while循环读取键盘信息
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done
##无限循环
while :
do
command
done
#或者
while true
do
command
done
#或者
for (( ; ; ))
##until循环
#用until来输出0到9的数字
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
##case语句 取值可以为变量或常数
#提示输入1到4,与每一种模式进行匹配
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
##跳出循环
#break命令允许跳出所有循环(终止执行后面的所有循环)。
#进入死循环直至用户输入数字大于5。要跳出这个循环
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done
##continue命令
#与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done
##注意esac
##case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break。