shell if 多个条件_shell流程控制语句

shell流程控制语句

eb95d9b1-f591-4b0a-9cef-406434a34cbb

任何编程语言都离不开流程控制语句,其实编程基本上就是掌握了流程控制语句,然后加上函数(或者是方法)以及变量基本就差不多了,语法的东西很少,主要还是处理逻辑。所以,逻辑思维很重要。

d1b1da8c-8e6d-49a2-9278-af1eb945884f

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语句之后来一个大例子把这些都包含进去。

f1d8f3fa-5c34-42b0-afa5-bd75adf7382c

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 (( ; ; ))
780373a5-7477-439e-bb11-7a50515ae81f

无限循环很好用,会经常用到,那有人就说了,有这样的程序吗?需要这样的逻辑处理吗?

有的,而且相当的多。

比方某个阴暗的拐角处,视频监控的一个软件就会一直对图像进行处理,判断图像是否具有安全问题,如果有,就会发出一个型号(比方说事故报警什么的)。那这个程序就会一直在那里无限循环。

continue和break

程序在运行的时候,有时候需要还没有到达循环末尾的时候就退出循环,比方我们在一个文件当中查找pason这个词,如果找到了,就退出了,找不到,就一直找下去,知道文件结尾。

假如我们只需要找到一个pason就退出了,这个时候我们就可以用break,这个可以退出整个循环。

假如我们要找到在一个文件夹中查找,每个文件中都要求找到一个pason即可。

那这个就是循环套循环了,如果我们在文件A中找到了pason,那文件A中就不需要找了,直接进入下次循环,进入文件B中去,这个时候可以用continue。

continue

continue退出本次循环,进入下一个循环。

break

break 退出当前循环

(欢迎关注公众号《码农派生》,会有小说连载,电影分享以及软件技术的文章)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值