linux要求循环结构,LinuxShell脚本——循环结构

linuxshell脚本——循环结构

摘要:本文主要学习了shell脚本中的循环结构。

while循环

基本语法

while循环是最简单的一种循环,如果条件满足则执行循环里的语句,如果条件不满足则退出循环:

1 while 条件

2 do

3 命令

4 done

注意,在循环体命令中必须有相应的语句使得条件“不成立”,只有这样才能最终退出循环,否则就成了死循环,一直执行下去,永无休止。

使用举例

打印0到100的累加后得到的值:

1 #!/bin/bash

2 i=0

3 sum=0

4 while (( i <= 100 ))

5 do

6 (( sum += i ))

7 (( i++ ))

8 done

9 echo ${sum}

until循环

基本语法

unti循环和while循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环:

1 until 条件

2 do

3 命令

4 done

使用举例

打印0到100的累加后得到的值:

1 #!/bin/bash

2 i=100

3 sum=0

4 until (( i <= 0 ))

5 do

6 (( sum += i))

7 (( i-- ))

8 done

9 echo ${sum}

for循环

基本语法

1 for ((初始化表达式; 判断表达式; 修改变量表达式))

2 do

3 命令

4 done

初始化表达式只会在循环执行前执行一遍,判断表达式每次都会进行判断,修改变量表达式会修改影响了判断表达式的。

使用举例

1 #!/bin/bash

2 sum=0;

3 for (( i=0; i <= 100; i++ ))

4 do

5 (( sum += i))

6 done

7 echo ${sum}

for-in循环

基本语法

1 for 变量名 in 取值列表

2 do

3 命令

4 done

取值列表

取值列表的形式有多种,你可以直接给出具体的值,也可以给出一个范围,还可以使用命令产生的结果,甚至使用通配符。

1)直接给出具体的值

可以在in关键字后面直接给出具体的值,多个值之间以空格分隔。比如1 2 3 4 5、"abc" "390" "tom"等。

2)给出一个取值范围

取值范围的具体格式为 {start..end} 。比如 {1..100} 。

3)使用命令的执行结果

使用反引号`命令`或者$(命令)获取到值,然后可以取得命令的执行结果作为取值列表。比如 $(ls *.sh) 。

4)使用shell通配符

shell通配符可以认为是一种精简化的正则表达式,通常用来匹配目录或者文件,而不是文本。比如 *.sh 。

5)使用特殊变量

shell中有多个特殊的变量,在取值列表中可以使用。比如$#、$*、$@、$?、$$。

使用举例

使用具体的值:

1 #!/bin/bash

2 sum=0;

3 for n in 1 2 3

4 do

5 (( sum += n ))

6 done

7 echo ${sum}

使用取值范围:

1 #!/bin/bash

2 for c in {a..z}

3 do

4 echo $c

5 done

使用在调用shell脚本时传入的值,可以省略 in 取值列表 部分:

1 #!/bin/bash

2 for c

3 do

4 echo $c

5 done

select-in循环

基本语法

select-in循环用来增强交互性,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能。

select-in是shell独有的一种循环,非常适合终端(terminal)这样的交互场景,c语言、c++、java、python、c#等其它编程语言中是没有的。

1 select 变量名 in 取值列表

2 do

3 命令

4 done

使用举例

编写shell:

1 #!/bin/bash

2 echo "what's your gender?"

3 select name in "mem" "women"

4 do

5 echo "choose $name"

6 done

7 echo "end shell"

执行shell并退出:

1 [root@localhost ~]# sh test.sh

2 what's your gender?

3 1) mem

4 2) women

5 #? 1

6 choose mem

7 #? 2

8 choose women

9 #? 1

10 choose mem

11 #?

12 end shell

13 [root@localhost ~]#

说明:

使用 #? 用来提示用户输入菜单编号。按下ctrl+d组合键结束select-in循环。

运行到select语句后,取值列表中的内容会以菜单的形式显示出来,用户输入菜单编号,就表示选中了某个值,这个值就会赋给变量,然后再执行循环体中的命令部分。

每次循环时select都会要求用户输入菜单编号,并使用环境变量ps3的值作为提示符,ps3的默认值为 #? ,修改ps3的值就可以修改提示符。

如果用户输入的菜单编号不在范围之内,那么就会给变量赋一个空值,如果用户输入一个空值(什么也不输入,直接回车),会重新显示一遍菜单。

注意,select是无限循环(死循环),输入空值,或者输入的值无效,都不会结束循环,只有遇到break语句,或者按下ctrl+d组合键才能结束循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值