云服务器

Linux丨shell语句while和until和case使用

2020-01-10 16:39:41 65

一、简介

平时工作中有不少重复的工作,并且无法统计需要循环该执行多少次,这个时候就需要while或者until循环语句帮助你解决一些繁琐重复性的工作。而case语句是匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。一般我们脚本会用到这个多分支选择结构。本章节就是介绍以上3个语句的简单入门用法。


二、shell循环语句

1.while循环语句

最常见的一种满足条件就进入循环的语句, 当条件满足时,while 重复地执行一组语句,直到条件不满足时,才退出 while 循环。

语法:

while 判断条件

  do

      循环语句

   …

  done


PS:【判断条件请查看shell的条件判断语句相关知识】
while 循环的执行流程:
        首先是对条件进行判断,如果条件成立,进入循环,执行 while 循环体中的语句(是 do 和 done 之间的语句,这样就完成了一次循环)。
        每一次执行到 done 的时候都会重新判断条件是否满足,如果满足,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不满足,就结束整个 while 循环,执行 done 后面的其它 Shell 代码或者直接退出。
例子1: 批量创建用户

1. vim test.sh
2. #
!/bin/bash
3. num=16
4.
while [ $num -ge 5 ]
5.
do
6. useradd  testuser$num

7. let
num--    

8. done
9.
echo user created
运行结果:


例子2:计算从1加到1000的和

1. vim test1.sh
2.
#!/bin/bash
3.
a=1
4. s=0
5.
while ((a <= 1000))
6.
do
7.
    ((s += a))
8.
    ((a++))
9. done
10.
echo "Your sum is: $s"
执行结果:


        可以看到while语句的应用只是简单的一个循环语句,文本只是举一个简单的例子说明来展示while语句,实现复杂的工作还是需要熟悉条件判断语句,这样才能更好地写出脚本。

2.until循环语句
        和while实现同样的功能,但是流程不一样,是一种不满足条件就执行循环的语句,直到条件满足就退出循环。
语法:

until   条件判断

do

     循环体

done:


until循环的执行流程:
        首先是条件进行判断,如果条件不满足,进入循环,执行until循环体中的语句(是 do 和 done 之间的语句,可能是多个语句,这样就完成了一次循环)。
        每一次执行到 done 的时候都会重新判断条件是否不满足,如果不满足,就进入下一次循环,继续执行 do 和 done 之间的语句,如果满足,就结束整个until循环,执行 done 后面的其它 Shell 代码或者直接退出。
例子1: 批量创建用户(和while对比一下)
  • 1. vim test2.sh
  • 2. #!/bin/bash
  • 3. num=1
  • 4. until [ $num -ge 6 ]
  • 5. do
  • 6. useradd  testuser$num 
  • 7. let num++
  • 8. echo "user created !"
  • 9. done
  • 10. echo "User creation complete !"



、shell分支结构语句

1.分支结构case语句(根据变量的不同取值 ,执行不同的操作)通常case结构和shell函数一起使用,给源码服务编写启动脚本。case 语句和 if...elif...else 语句,同一种类型都是多分支条件语句。

2.语法:

case  "$变量名"  in

"模式1”)

    命令序列1 ;;

"模式2")

    命令序列2 ;;

"模式N")

    命令序列N ;;

*)

    默认命令序列

esac


3.case 语句的工作流程:

case语句会取出变量中的值(就是你在命令行输入的值),然后与语句体中每个分支的值逐一匹配。如果数值匹配,则执行对应分支的程序;如果数值不匹配,则依次进行下一个值的匹配;如果所有的值都不匹配则执行"*)","*"代表所有其他值中的程序,一般是写明变量有哪些可以填写。

4.注意点
(1)case 语句以"case"开头,以"esac"结尾。
(2)在每个分支程序之后要以";;"(双分号)结尾,代表该程序段结束。

5.例子
(1)Ubuntu系统中iptables是没有启动脚本的,我们可以通过case语句做一个简单的开启关闭脚本。定义Iptables配置存放位置/etc/iptables.rule【我做了一下基本的预设置】


执行结果如下:



        这样设置了iptables的启动脚本是不是方便多了,只需要去修改配置文件,重启iptables脚本即可生效。按照这样的例子,自己可以把一些源码包的程序制作成一个启动脚本,赶紧去试一试吧

睿江云官网链接:https://www.eflycloud.com/home?from=RJ0032

上一篇: 无

微信关注

获取更多技术咨询