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

条件测试:

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

  文件状态测试:

 

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

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

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

示例程序如下:

1 #!/bin/bash
2 
3 [ -d test ]
4 
5 if [ $? -eq "0" ];then
6     echo "file is exist";
7 else
8     echo "file not exist";
9 fi

执行结果如下:

 

 

 

 

  字符串测试:

 

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

 

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

  数值测试:

 

示例如下:

 

  数字运算:

 

 运算符测试如下:

 

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

 

  if then else语句:

if 条件

then 命令

fi

示例:

if [ "13" -lt "12" ]

then echo "yes 13 is less than 12"

else

  echo "NO"

fi

1 if [ "13" -lt "12" ]
2 
3 then echo "yes 13 is less than 12"
4 else
5     echo "NO"
6 fi

 

1 if [ "13" -lt "12" ];then 
2     echo "yes 13 is less than 12"
3 else
4     echo "NO"
5 fi

 

执行结果如下:

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

if  条件1

then

  命令1

elif  条件2

then

  命令2

else

  命令3

fi

如下所示:

   case语句:

 

示例程序如下:

 1 #!/bin/bash
 2 
 3 echo "enter a num(1-3):"
 4 
 5 read num
 6 
 7 case $num in
 8     1)
 9         echo "num is 1"
10         ;;
11     2)
12         echo "num is 2"
13         ;;
14     3)
15         echo "num is 3"
16         ;;
17     y|Y)
18         echo "you select y"
19         ;;
20     *)
21         echo "quit"
22         exit
23         ;;
24 esac

执行结果如下:

 

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

 

  for循环:

 

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

 

再看一个for的示例程序:

1 #!/bin/bash
2 
3 for i in `cat file2.txt`
4 do
5     echo $i
6 done

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

 

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

打印结果如下:

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

 

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

示例如下:

 

运行结果如下:

 

 

until循环:

 

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

 

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

grep和awk小实例:

 

  while循环:

 

示例如下:

 

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

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

 

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

  break和cotinue:

 

示例如下:

 

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

continue用法示例如下:

posted on 2018-07-28 17:47  周伯通789  阅读(251)  评论(0编辑  收藏  举报