快速掌握shell脚本的各种循环语句

?shell的各种循环语句:for、while、until、select?
1、for循环#语法结构
#第一种:取值变量
for 变量名 in 变量取值表do指令 done#例子:
#示例for a in {1..9}domkdir dir$adone#说明:创建9个目录【快速掌握shell脚本的各种循环语句】#第二种:C语言型for循环
for ((exp1; exp2; exp3))do指令done#例子:
#示例for ((i=1;i<=3;i++))doecho $idone#解释:i从1开始,当i<=3就可以运行,如果运行的值大于3,就退出循环#语法结构讲解for关键字后的双括号是三个表达式,第一个是变量初始化(例如:i=1),第二个为变量的范围(例如i<=3),第三个为变量自增或自减(例如i++) 。当第一个表达式的初始化值符合第二个变量的范围时,就进行如循环执行,当条件不满足时就退出循环#简单示例
#1.竖向打印10 9 8 7 6 5几个数字
#第一种方法:直接列出元素
[root@game scripts]# cat for1.sh #!/bin/bashfor i in 1 2 3 4 5doecho $idone#效果[root@game scripts]# sh for1.sh 12345第二种方法:使用大括号{}生成数字序列
[root@game scripts]# cat for2.sh #!/bin/bashfor i in {1..5}doecho $idone#效果[root@game scripts]# sh for2.sh 12345#第三种方法:使用seq生成数字序列
[root@game scripts]# cat for3.sh #!/bin/bashfor i in `seq 1 5`doecho $idone#效果[root@game scripts]# sh for3.sh 12345#2.获取当前目录下的目录或文件名,并将其作为变量列表打印输出
#数据[root@game ~]# mkdir -p /test/{test1.txt,test2.txt,guo.txt,ke.txt}[root@game ~]# ls -l /test/total 0drwxr-xr-x. 2 root root 6 Aug 21 22:14 guo.txtdrwxr-xr-x. 2 root root 6 Aug 21 22:14 ke.txtdrwxr-xr-x. 2 root root 6 Aug 21 22:14 test1.txtdrwxr-xr-x. 2 root root 6 Aug 21 22:14 test2.txt#编写脚本[root@game scripts]# cat for4.sh #!/bin/bashusage(){echo "directory not found"}[ ! -d /test ] && usage && exit 1cd /testfor i in `ls`doecho $idone效果[root@game scripts]# sh for4.sh guo.txtke.txttest1.txttest2.txt2、while循环#while循环一般应用于守护进程程序或一直循环执行
#语法格式
while <条件表达式>do指令done#简单示例
每隔2秒在屏幕上输出一次负载值[root@game scripts]# cat while1.sh #!/bin/bashwhile truedouptimesleep 2 #暂停2秒再执行done#提示:while true表示条件永远为真,因此会一直运行,像死循环一样,称为守护进程#效果:每隔2秒就输出一次[root@game scripts]# sh while1.sh23:11:35 up 2 days,2:00,2 users,load average: 0.00, 0.01, 0.05 23:11:37 up 2 days,2:00,2 users,load average: 0.00, 0.01, 0.05 23:11:39 up 2 days,2:00,2 users,load average: 0.00, 0.01, 0.053、until循环#until循环是当条件表达式不成立时,就会进入循环,当条件表达式成立时,就会终止循环
#语法格式
until <条件表达式>do指令done#示例
#如果用户输出的是guoke就符合条件,退出循环,如果不是,用户输入3次之后就退出循环[root@game scripts]# cat until1.sh#!/bin/bashi=1until [ "$user" = "guoke" -o "$i" -gt 3 ]doread -p "please enter you username:" userlet i++done#效果[root@game scripts]# sh until1.sh please enter you username:guoke[root@game scripts]# sh until1.sh please enter you username:1please enter you username:1please enter you username:1[root@game scripts]#4、select循环#语法格式
select 变量名 in [菜单取值列表]do指令done#示例
#第一种:直接使用列表字符串[root@game scripts]# cat select1.sh #!/bin/bashselect name in Apache httpd Nginx Tomcatdoecho $namedone#效果[root@game scripts]# sh select1.sh 1) apache2) httpd3) nginx4) tomcat#? 1apache#? 3nginx#? 4tomcat#? ^C#第二种:采用数组做变量列表[root@game scripts]# cat select2.sh #!/bin/bash?array=(aache nginx tomcat lighttpd)select name in "${array[@]}"doecho $namedone#效果[root@game scripts]# sh select2.sh 1) apache2) nginx3) tomcat4) lighttpd#? 3tomcat#? 4lighttpd#? ^C5.循环控制及状态返回值break (循环控制)
continue (循环控制)
exit (退出脚本)
return (退出函数)
#区别
break continue在条件语句及循环语句(for if while等)中用于控制程序的走向exit是终止所有语句并退出脚本return:仅用于在函数内部返回函数执行的状态值#break示例
#如果i等于3,那么就终止循环[root@game scripts]# cat break1.sh #!/bin/bashfor ((i=0;i<=5;i++))doif [ $i -eq 3 ];thenbreakelseecho $ifidoneecho "1111"yum install net-tools -y > /dev/null[ $? -eq 0 ] && echo "already install"#效果[root@game scripts]# sh break1.sh 0121111already install#说明:i等于3的时候就终止循环,但是没有跳出脚本


推荐阅读