shell中的if、for、while、break和case语句

if语句

if [表达式]; then
xxx
yyy
zzz
else
xxx
ddd
uuu
fi

if的典型应用:
判断xxx文件是否存在。[ -f xxx ],注意[]里面前后都有空格,不能省略。
判断xxx目录是否存在 [ -d xxx ]
判断字符串是否相等[ “str1” = “str2” ],注意用一个等号而不是两个
判断数字是否相等[ 11 -eq 22 ]、大于[ 11 -gt 2 ]、小于[ 33 -lt 33]、大于等于[ 11 -ge 11 ]、小于等于[ 44 -le 77]
(eq就是equal,gt就是greater than,lt就是less than,ge就是greater or equal,le就是less or equal)
判断字符串是否为空[ -z $str ] 注意-z判断时如果变量本身没定义也是不成立(也就是说-z认为没定义不等于为空)。也可以 [ $str = “” ]

if判断式中使用“-o”表示逻辑或:
相当于C语言中在if后面的条件式中用逻辑与、逻辑或来连接2个式子,最终的if中是否成立取决于2个式子的逻辑运算结果。
[ 12 -eq 12 -o “abcd” = “abcd” ]

逻辑与&&和逻辑或||与简写的if表达式相结合(没有if关键字,只有中括号):
[ -z s t r ] ∣ ∣ e c h o " k n g " / / 如 果 str ] || echo "kng" //如果 str]echo"kng"//str不为空则执行后面一句,若为空则不执行后面一句
[ -z $str ] && echo “kng”

for循环

#!/bin/sh
for i in 1 2 3 4 5
do
echo $i
done //循环结束符

while循环
(1)和C语言的循环在逻辑上无差别
(2)要注意很多格式要求,譬如:while后面的[]两边都有空格,[]后面有分号分号(如果do放在一行的话),i++的写法中有两层括号。
i=1
j=11
while [ $i -lt $j ]; do
echo i i = i i= ii=(($i + 1))
done

case语句
(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异
(2)shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同。shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break)。
var=2
case $var in

  1. echo "1 ;;
  2. eccho “2” ;;
    esac

(3)shell中的break关键字和C语言中意义相同(都是跳出)但是用法不同。因为shell中case语句默认不用break的,因此在shell中break只用于循环跳出。所以当while中内嵌case语句时,case中的break是跳出外层的while循环的,不是用来跳出case语句的。例如下面的例子break跳出的时while循环,而不是case。
shell中的if、for、while、break和case语句_第1张图片

你可能感兴趣的:(Shell)