3.3 shell控制流结构

时间:2024-06-18 23:34:20

shell中的控制流包括if then else语句,case语句,for循环,until循环,while循环,break控制,continue控制。

条件测试:

  有时判断字符串是否相等或检查文件状态或是数字测试等,Test命令用于测试字符串、文件状态和数字。

  文件状态测试:

3.3  shell控制流结构

在Linux下敲入命令,效果如下:

3.3  shell控制流结构

test -w tmp.txt和[ -w tmp.txt ]的作用是一样的。

也可以测试两个表达式,例如:[ EXPRESSION1 -a EXPRESSION2 ] 或者test EXPRESSION1 -a EXPRESSION2

示例程序如下:

 #!/bin/bash

 [ -d test ]

 if [ $? -eq "" ];then
echo "file is exist";
else
echo "file not exist";
fi

执行结果如下:

3.3  shell控制流结构

3.3  shell控制流结构

  字符串测试:

3.3  shell控制流结构

测试两个字符串是否相等,如下所示:

3.3  shell控制流结构

测试相等时,  = 两边要有空格,给变量赋值时,=号两边不能有空格。

  数值测试:

3.3  shell控制流结构

示例如下:

3.3  shell控制流结构

  数字运算:

3.3  shell控制流结构

运算符测试如下:

3.3  shell控制流结构

3.3  shell控制流结构

要想执行正确的运算,加号两边要有空格。

  if then else语句:

if 条件

then 命令

fi

示例:

if [ "13" -lt "12" ]

then echo "yes 13 is less than 12"

else

  echo "NO"

fi

 if [ "" -lt "" ]

 then echo "yes 13 is less than 12"
else
echo "NO"
fi
 if [ "" -lt "" ];then
echo "yes 13 is less than 12"
else
echo "NO"
fi

执行结果如下:

3.3  shell控制流结构

if else then也可以写成下面的语法:

if  条件1

then

  命令1

elif  条件2

then

  命令2

else

  命令3

fi

如下所示:

3.3  shell控制流结构

  case语句:

3.3  shell控制流结构

示例程序如下:

 #!/bin/bash

 echo "enter a num(1-3):"

 read num

 case $num in
)
echo "num is 1"
;;
)
echo "num is 2"
;;
)
echo "num is 3"
;;
y|Y)
echo "you select y"
;;
*)
echo "quit"
exit
;;
esac

执行结果如下:

3.3  shell控制流结构

basename可以从完整路径中取出文件名字:

3.3  shell控制流结构

  for循环:

3.3  shell控制流结构

下图两个程序不一样,其中第一个是一个变量,第二个是三个变量:

3.3  shell控制流结构

再看一个for的示例程序:

 #!/bin/bash

 for i in `cat file2.txt`
do
echo $i
done

其中in后面是反引号,里面的命令会执行,因此输出如下:

3.3  shell控制流结构

file2.txt中的内容如果是下面这样,那打印结果如何呢?

3.3  shell控制流结构

打印结果如下:

3.3  shell控制流结构

可见for循环在列表中取每一项的时候,换行符和空格都作为分隔符。

如果for语句的后面没有in语句,此时语句等价于: in  $@

示例如下:

3.3  shell控制流结构

运行结果如下:

3.3  shell控制流结构

until循环:

3.3  shell控制流结构

awk从一行数据中提取1列, sed的用法为 sed 's/old/new/g'  s表示替换,old是匹配到的老的数据,new是要替换成的新数据,g表示全部替换。

3.3  shell控制流结构

上述程序中,当锁文件不存在时,退出until循环,until的意思是直到这个条件为真,就退出。注意[ ]里面的取反!。

grep和awk小实例:

3.3  shell控制流结构

  while循环:

3.3  shell控制流结构

示例如下:

3.3  shell控制流结构

上述程序中,循环读入名字。

从文件中读数据的示例如下:

3.3  shell控制流结构

这个格式是固定的,重定位的文件名只能写在done之后。按行读入。如果写在LINE之后,程序会出错。

  break和cotinue:

3.3  shell控制流结构

示例如下:

3.3  shell控制流结构

while后面的冒号表示死循环。

continue用法示例如下:

3.3  shell控制流结构