linux+while循环多条件,Linux下的shell编程之循环(for循环,while循环)和条件判断(if条件判断,case条件判断)...

一.shell中的for循环

1.for循环的语法格式

shell中的 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致。

常用的for循环结构有三种:

粗略的结构:

for    条件

do

循环主体

done

<1>语法一:

for   变量    in   值1  值2   值3...

do

循环主体

done

或者

for   变量    in   {起始值..终止值}                  #这里面的起始值和终止值必须是纯数字,不能是$a,即不能是变量的值

do

循环主体/命令

done

示例1:

89eb34ead1da2e60ce21fbf2274e5ae3.png

594a3fffd189fd0397fdd6543da0655d.png

示例2:

626dd5d2c9a982994c97c6905c569b8a.png

d222bbca3ec368b92fd175ead68194cc.png

<2>语法二:

for   变量    in     `命令`

do

循环主体

done

示例3:

5c78e419ae550312f38eae16afd94c3c.png

9dc58b4b8ec157503fc92ee4259f1d5b.png

<3>语法三:

for   ((初始值;循环控制;变量变化))

do

循环主体

done

示例4:

1a765adebea42582cf5e470152d6609d.png

e8e19200787223e16127195e5658ac3f.png

2.for的嵌套循环

1b9f5aa9526b389a8ccf281ae677f47b.png

5734337d04541e87155f8769fd0ce211.png

3.for循环的练习题

<1>练习1:编写脚本测试172.25.254网段中的主机网是否是通的。

如果是通的,就显示172.25.254.主机号  is up;如果是不通的,就显示172.25.254.主机号  is  down。

脚本内容

670af8afe011696fe76dad611a23011c.png

脚本运行结果

41d0d3e44d930251e2ae766ffcb85938.png

<2>练习2:编写脚本实现倒计时10秒。

显示 Time   秒数

脚本内容

d5d120e7cfb5fdd70d97cf04c3fb0952.png

脚本运行结果

ae4ad5e6527df911a553d140199c8412.png

<3>练习3:编写脚本实现从输入的分钟数和秒数开始改进行时间的倒计时。

显示 Time   分钟:秒

方法一:将分钟数化为秒数

脚本内容

#!/bin/bash

read   -p   "请输入分钟数和秒数:"   a   b

let   time=$a*60+$b

#for   i   in   {$time..1}                  #这行代码的写法是错误的。{起始值  终止值},这里的起始值和终止值都必须是纯数字,不能写成某个变量的值

for   ((i=$time;i>0;i--))

do

echo   -n   "TIME   `expr   $i  /  60`:`expr   $i  %  60` "

echo   -n   -e   "\r"

sleep   1

done

c8eb9faf289a34517ad980a9a8e75171.png

脚本运行结果

2eb0b4089c3a52afe12f30d5104e787c.png

方法二:利用for双循环实现

脚本内容

70ee59079e832bb3c132aa6cef445c5c.png

脚本运行结果

434cb7562f788e83fd4c2dd5950e0a7f.png

<4>编写脚本实现打印9*9乘法表。

显示1*1=1

2*1=2   2*2=4

.................................

写法一:

脚本内容

d7f61345adcec02d0a9c364330e60261.png

脚本运行结果

b4fd9daaaafe624c1dffb04a26dd9ebb.png

写法二:

脚本内容

dc5b64411fbf85d1bacf0b26a53b341f.png

脚本运行结果

bbaafc8a4b758aa9fe54eaf2617dc8ba.png

二.shell中的while循环

1.while循环的语法格式

for循环适用于事先知道循环的次数,对于实现不知道循环的次数,for循环将会束手无策。而while循环可以解决实现不知道循

环次数这类问题。对于事先知道循环次数的问题,for循环和while循环是相通的,for循环能解决的问题,while循环也可以解决。

常用的while循环的结构有三种:

粗略的结构:

while   条件

do

循环主体

done

<1>语法一:

初始值

while  [  条件判断语句  ]

do

循环主体

变量变化                   #这里变量变化的方式有两种,一种是((a++)),另外一种是a=`expr  $a  +  1`

done

示例1:

75720a9fe68a9a6e8f5e36c52ef191d4.png

090c76f79f70605de24a72eb56012e27.png

<2>语法二:

初始值

while  ((条件判断语句))

do

循环主体

变量变化                                   #这里变量变化的方式有两种,一种是((a++)),另外一种是a=`expr  $a  +  1`

done

示例2:

35bebb9d6076ae41b23ca60c6d9d87e9.png

91a71acc577dc9b27d4dafa0672f09dd.png

<3>语法三:死循环(不同于for循环的地方,能解决实现不知道循环次数的问题的原因所在)

while   true

do

循环主体

done

示例3:

044a48ced358c0897295fc6d7ea046ff.png

fa57516fa05bc1c4727f7dcd9aa3977d.png

2.while循环的练习题

编写一个脚本,使用while循环语句新建用户xin{1..20},并且设置这些用户的密码都为"123456"

脚本内容

355b48e24735a79c9fad0fbcba7fb76c.png

脚本执行结果

79432d3fafaa39d10accb6ff1236c347.png

三.shell中的if条件判断(else语句是可以没有的)

1.if条件判断的语法格式

常用的if条件判断有三种结构:

<1>单分支if语句

if    条件判断;then                    #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

语句体

fi

示例1:

595522d88bb2f7fe93ce653506b04aa4.png

68850d346dcbc354bf5354d7dc969017.png

<2>双分支if语句

if    条件判断;then                    #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

语句体1

else

语句体2

fi

示例2:

b3a6a304d03c21366f75921f63bbf460.png

da725cd75adc18152b4bdaf87acf4ba9.png

<3>多分支if语句

if    条件判断;then                   #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

语句体1

elif 条件判断;then#其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

语句体2

elif 条件判断;then #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

语句体3

...                         #表示可以有多个

else

语句体...

fi

示例3:

1935e9fbef51affd2ab5d946d73e7dea.png

a21562022d7b792567ec87236adad7cf.png

四.shell中的case条件判断(*)语句是可以没有的)

1.case条件判断的语法格式

case条件判断适用于需要进行多重分支的应用情况。case条件判断只针对于条件判断是某个(单个匹配模式)或某些(合并

匹配模式)具体的情况而不是一个无限的区间(比如0

个)。对于条件判断是某个(单个匹配模式)具体的情况,case条件判断能实现的效果,if条件判断也可以实现同样的效果。

case语句结构特点如下:

case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。

双分号";;"表示命令序列结束。

匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。

最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。

常用的case条件判断的结构有两种:

<1>语法一:单个匹配模式

case   $变量名    in

模式1)

命令序列1

;;

模式2)

命令序列1

;;

.....                          #表示可以有多个

*)

默认执行的序列

;;

esac

示例1:

e6ce9a571812a63cb9c4df456d77ee85.png

aa9735648c268f33cf8a9fdb61ee4621.png

<2>语法二:合并匹配模式

case   $变量名    in

模式1|模式2|模式3|......)              #......表示可以有多个

命令序列1

;;

模式4|模式5|.......)                      #......表示可以有多个

命令序列1

;;

.....                          #表示可以有多个

*)

默认执行的序列

;;

esac

示例2:

afee51c6071d44269823bab79b3efb09.png

814c8b5a8ce8a0b8e10d6fccfa170741.png

2.case条件判断的练习题

编写脚本,实现交互式执行对应的程序功能

https://www.jb51.net/article/43968.htm

第一种写法:(使用echo打印)

脚本内容

6fe979bab43079e330cf6aa9ba4ad4aa.png

fb5019b22537f0db7aaeff781cdf8420.png

脚本执行结果

3c712f32a0cf3e288ec0b28c2ac93b28.png

45058efe2db75705cc55d115ce5e811e.png

第二种写法:(使用awk命令中的print打印)

脚本内容

2a969c5c9ec4ca62c38e530ca822c12e.png

e19fda7dad12ded279fbf759a1598a96.png

脚本运行结果

9baaa05569592e7d0f9fd3f21f41dfdc.png

030019bb438dd9dd1dd1b986988e132b.png

所有写法汇总:

4b0fd350ab9d1e0c8a5f2360e7b54fe0.png

2ac3fe008e2e50f482e12c04a70f3912.png

脚本运行结果:

8ad092cc4df1e1ab2a01efb0b3c1f281.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值