linux脚本实现循环,shell脚本的各种循环
For循环
For循环格式
For 变量名in列表 ;do
循环体
Done
执⾏机制:
依次将列表中的元素赋值给变量名,每次赋值后即执⾏⼀次循环体,知道列表中的元素耗尽,循环结束。
列表中可以是各种各样的空格隔开的字符,数字,单词都可以,列表中有多少个字符,将执⾏多少遍循环。在执⾏循环的时候,第⼀次执⾏循环,将匹配列表中的第⼀个值,⽐如说列表中有a b c d四个字母,当第⼀次执⾏循环的时,这个变量的值将等于a。循环体可以执⾏很多指令。
例如:
列表⽣成⽅式:
(1)整数列表:
{1..10} ⽣成1到10的数 但是不可以加变量
Seq 1 10 ⽣成1到10的数 可以加变量
步进 seq 1 2 10每次加2进⾏递增
由于seq是命令,在for循环⾥要调⽤命令,即命令调命令,需要⽤反向单引号包住。
eg:for id in `seq 1 10`,也可以⽤$()。
(2)返回列表命令
$(COMMAND)
(3)使⽤glob如:“*.sh”
例如:#!/bin/bash
For file in /root/bin/*.sh
匹配该路径下所有是.sh结尾的⽂件
do
echo“the filename is $file”
(4)变量引⽤ $* $@
$* 和$@的区别
新建脚本test.sh
执⾏结果
$*将a b c看成了⼀个独⽴的整体。
新建脚本test2.sh
执⾏结果
$@将a b c看成了三个独⽴的字符串。
但是,这只是将$@ $*⽤引号引起来才有区别,不⽤引号则⼆者都将a b c看成三个独⽴的字符串,没有区别。
While循环
通⽤性更好,适合范围⼴
While格式:
While CONDITION ;do
循环体
Done
COMDITTON:循环控制条件,进⼊循环之前,先做⼀次判断,每⼀次循环之后再做⼀次判断,条件为true,则执⾏⼀次循环。直到条件测试状态为“false”终⽌循环。
因此,COMDITION⼀般应该有循环控制变量。⽽此变量的值会在循环体不断的被修正。
进⼊条件:CONDITION为true
退出条件:CONDITION为false
COMDITION不仅是执⾏循环的条件,也是进⼊循环的条件。
例如:
执⾏结果
先判断10是否⼤于1,⼤于1则打印“da yu 1”并10-1=9再进⼊循环,直到等于1则退出循环。
Until循环
格式:
Until CONDITION ; do
循环体
Done
进⼊条件:CONDITION为false
退出条件;CONDITION为true
先判断CONDITION是否为真,如果为真,则退出循环,如果CINDITION为假,才
才进⼊循环体,执⾏完循环体,再判断CONDITION是否为假,如果为假,则再进⼊循
环体,直到条件结果为真时,才退出循环。
例如:
执⾏结果
当i=10⼩于1条件为假时,进⼊循环,并输出‘da yu 1’,并10-1=9继续进⼊循环。直到结果等于1时,循环结束,输出yyy。
循环控制语句
Continue[N]:提前结束第N层的本轮循环,⽽直接进⼊下⼀轮循环判断,最内层为第⼀层。Continue是退出当次循环。
例如:
当10⼩于1为假时,进⼊循环,10除以2余数为0且余数不等于1,为假,则打印$i也就是10。然后10-1=9进⼊循环。9除以2余数为1且余数等于1,为真。则执⾏9-1,并退出本次循环,进⼊下⼀次循环,依次类推,直到$i⼩于1为真时,退出循环,并打印yyy。
Break[N]提前结束第N层循环,break是退出整个循环,例如:
执⾏结果:
当10⼩于1为假时,进⼊循环,10的余数是0,不等于1,为假。将10打印输出并减1进⼊下⼀轮循环。9⼩于1为假时,进⼊循环,9的余数是1,为真,则break退出整个循环,并打印yyy。
While的特殊⽤法
遍历⽂件的每⼀⾏。
While read line ;do
循环体
shell脚本返回执行结果
Done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE⽂件中的每⼀⾏,且将⾏赋值给变量line。
例如:
这是⼀个死循环。
例如:while read passwd ; do echo $passwd |cut -d: -f1,3;done < /etc/passwd
输⼊⼀个变量$passwd。当每次读⼀个⽂件进来后,每⼀⾏的内容就赋值给了$passwd这个变量,并将取出的⾏显⽰出来。以“:”作为分隔符,取出其第⼀列和第三列,然后重定向输出给/etc/passwd。是⼀⾏⼀⾏处理的,读⼀⾏打印⼀遍。
双⼩括号的特殊⽤法 ((…….))
双⼩括号⽅法,即((……..))格式,也可以⽤来算数运算,双⼩括号也可以使⽤bash shell实现c语⾔风格的变量操作。
#i=10
#((i++))
例如:
For循环的特殊格式
for((控制变量初始化;条件判断表达式;控制变量的修正表达式))
do
循环体
Done
控制变量初始化:仅在运⾏到循环代码段时执⾏⼀次,只执⾏⼀次。
控制变量的修正表达式:每轮循环结束,会先进⾏控制变量的修正运算,然后再条件判断。
例如:
For ((cmd1;cmd2;cmd3))
Do
Cmd4
Done
先执⾏cmd1(不管真假),执⾏完后再执⾏cmd2,判断cmd2是否为真,为真则执⾏cmd4,如果为假,则退出循环。Cmd4执⾏完后接着执⾏cmd3。执⾏完cmd3后,接着执⾏cmd2,判断cmd2的
真假,为真则继续循环。
Cmd1只执⾏⼀次,作为for循环的初始化语句,若cmd1为假,则退出。
Cmd2才是进⼊循环和退出循环的判断条件,cmd3和cmd4只是执⾏,不管真假。
例如:
执⾏结果 :6
Select循环与菜单case
格式:
Select variable in list
Do
循环体命令
Done
Select循环主要⽤来创建菜单。按数字顺序排列的菜单项将显⽰在标准错误伤,并显⽰PS3提⽰符,等待⽤户输⼊。⽤户输⼊菜单列表中的某个数字,将执⾏相应的命令。
⽤户输⼊被保存在内置变量ERPLY中。
例如:
执⾏结果
Select是个⽆限循环,因此要记住使⽤break命令退出循环,或⽤exit命令终⽌脚本,也可以按Ctrl+C退出循环。Select经常和case联合使⽤。
与for循环类似,可以省略in list,此时使⽤位置变量。例如:$1 $2 $3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论