shell流程控制语句
任何编程语言都离不开流程控制语句,其实编程基本上就是掌握了流程控制语句,然后加上函数(或者是方法)以及变量基本就差不多了,语法的东西很少,主要还是处理逻辑。所以,逻辑思维很重要。
if语句
对于计算机来说,它只知道有或者没有,是正或者是负,有电或者没电,其实就是1和0的事儿。因此,if语句很重要,但又很简单,不过shell又很多不好的地方,用了之后的同事都说没有python和perl好用。
来看看shell中if语句的格式吧。
第一种
if else
if
格式有点像下面这种
if conditionthen command1 command2 ... commandN fi
例如
#!/bin/basha=3#eq 是表示相等的意思#这里一定要注意括号和变量要用空格,空号和if之间也要有空格if [ $a eq 3 ];then echo "a equal 3"fi
来看看第二种
第二种
这种是含有else的,就是可以有多个分支。
if condition
then
command1
command2
...
commandN
else
command
fi
我们还是用上面那个例子看看
#!/bin/basha=3#eq 是表示相等的意思#这里一定要注意括号和变量要用空格,空号和if之间也要有空格if [ $a eq 3 ];then echo "a equal 3"else echo "a not equal 3"fi
上面这里也可以写成这样
#!/bin/basha=3#eq 是表示相等的意思#这里一定要注意括号和变量要用空格,空号和if之间也要有空格#如果我们把then另起一行的话,if那一行就不需要用分号结尾了if [ $a eq 3 ]then echo "a equal 3"else echo "a not equal 3"fi
就是这么简单。
这里可以判断两个分支了,那我们来看看能不能使用判断多个分支的。
第三种
if condition1then command1elif condition2 then command2else commandNfi
这里的下面这个条件可以无限循环下去,你想写多少个分支就写多少个分支
elif condition2 then
来看一个例子,判断两个变量是否相等:
#!/bin/basha=3b=2#这里一定要注意括号和变量要用空格,空号和if之间也要有空格#如果我们把then另起一行的话,if那一行就不需要用分号结尾了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
if语句总结
其实虽然说有三种,但是只要我们掌握第三种就可以了。
你要是细心一点,就会发现第三种已经包含第一种和第二种了。
另外,还有一些if的复杂使用(其实这个已经不算是语法问题了),比方说if多个条件判断,if语句嵌套(if语句里面又要判断)等等这些,等我们讲完所有的shell语句之后来一个大例子把这些都包含进去。
for语句
for语句就没有那么多中情况了,只有一种语法:
for var in item1 item2 ... itemNdo command1 command2 ... commandNdone
来看几个例子
打印输出1到5
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
输出
The value is: 1The value is: 2The value is: 3The value is: 4The value is: 5
计算1到100的和
#!/bin/bashsum=0for i in {1..100}do let sum=sum+$idoneecho $sum
输出 5050
也可以写成这样
#!/bin/bashsum=0for i in `seq 1 100`do let sum=sum+$idoneecho $sum
while语句
while语句和for语句差不多的。
满足condition的时候 会做command的操作。
while conditiondo commanddone
来用while实现打印1到5,实现了这个你就可以用循环打印任意范围的数字了。
#!/bin/bashint=1while(( $int<=5 ))do echo $int let "int++"done
运行脚本,输出:
12345
说一下这的let命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。
let命令
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
格式如下:
let arg [arg …]
实例:
自加操作:let no++
自减操作:let no–
简写形式 let no+=10,let no-=20,分别等同于 let no=no+10,let no=no-20。
以下实例计算 a 和 b 两个表达式,并输出结果:
#!/bin/bashlet a=5+4let b=9-3 echo $a $b
输出结果为:
9 6
死循环(无限循环)
无限循环就是这个程序在这个循环中一直运行,不会退出。
while :do commanddone
或者是
while :do commanddone
或者是for语句的
for (( ; ; ))
无限循环很好用,会经常用到,那有人就说了,有这样的程序吗?需要这样的逻辑处理吗?
有的,而且相当的多。
比方某个阴暗的拐角处,视频监控的一个软件就会一直对图像进行处理,判断图像是否具有安全问题,如果有,就会发出一个型号(比方说事故报警什么的)。那这个程序就会一直在那里无限循环。
continue和break
程序在运行的时候,有时候需要还没有到达循环末尾的时候就退出循环,比方我们在一个文件当中查找pason这个词,如果找到了,就退出了,找不到,就一直找下去,知道文件结尾。
假如我们只需要找到一个pason就退出了,这个时候我们就可以用break,这个可以退出整个循环。
假如我们要找到在一个文件夹中查找,每个文件中都要求找到一个pason即可。
那这个就是循环套循环了,如果我们在文件A中找到了pason,那文件A中就不需要找了,直接进入下次循环,进入文件B中去,这个时候可以用continue。
continue
continue退出本次循环,进入下一个循环。
break
break 退出当前循环
(欢迎关注公众号《码农派生》,会有小说连载,电影分享以及软件技术的文章)