天天看点

Linux革命性工具,shell脚本循环结构重复执行命令

为什么要用循环结构

在shell运维中,很多时候我们都要重复的执行某个功能,而计算机比人的优势大的地方就在于适合执行确定的功能。利用计算机的强大计算能力完成自动化脚本工作。

Linux革命性工具,shell脚本循环结构重复执行命令

比如我要新建一批用户cat1、cat2、...、cat100。密码是用户名加上后六位随机数。这个过程如果手动完成是非常耗时,要重复执行useradd添加用户并用passwd分配密码。但是使用循环脚本就非常方便了,如果将用户量增大到100台服务器,每台服务器分配1000个人用户,就可以显示出循环语句的威力。

Linux革命性工具,shell脚本循环结构重复执行命令

for循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done           
for i in 1 2 3 hello abc
do
    echo $i
done           

输出当前路径下所有文件名

for i in `ls`
do
    echo $i
done           

输出序列1-10

for i in $(seq 1 10)
do
    echo $i
done           
for i in {1..10}
do
    echo $i
done           

输出字母a-z

for i in {a..z}
do
    echo $i
done           

for ((…;…;…)) do…done

for ((i=1;i<=10;i+=2))
do
    echo $i
done           

while循环

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。

while condition
do
    command
done           

偶数和

sum=0
i=0

while [ $i -le 50 ]
do
    let sum+=i
    let i+=2
done

echo "0-50的偶数和为:$sum"           

循环输入名字,文件结束符为Ctrl+d,输入文件结束符后read指令返回false。

while read -p "Please input your name: " name
do
    echo $name
done           

until 循环

until 循环执行一系列命令直至条件为 true 时停止。

until 循环与 while 循环在处理方式上刚好相反。

一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

until 语法格式:

until condition
do
    command
done           

condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

以下实例我们使用 until 命令来输出 0 ~ 9 的数字:

a=0

until [ ! $a -lt 10 ]
do
    echo $a
    a=`expr $a + 1`
done           

跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell 使用两个命令来实现该功能:break 和 continue。

Linux革命性工具,shell脚本循环结构重复执行命令

break 命令

break 命令允许跳出所有循环(终止执行后面的所有循环)。

下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。

while true
do
    read -p "请输入1-5虹之间的数字:" n

    case $n in
        1|2|3|4|5) echo "你输入的数字为$n"
        ;;
        *) echo "请输入正确的数字范围"
           break
        ;;
    esac
done
           

continue

continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

对上面的例子进行修改:

while true
do
    read -p "请输入1-5之间的数字:" n

    case $n in
        1|2|3|4|5) echo "你输入的数字为$n"
        ;;
        *) echo "请输入正确的数字范围"
            continue
            echo "游戏结束,这句话永远不会被执行"
        ;;
    esac
done
           

视频讲解

视频加载中...

相关推荐

  • 什么是Linux系统?我们是否要用Linux
  • 学习Linux命令行,用手就行!
  • Linux革命性工具,shell脚本自动化
  • Linux革命性工具,shell脚本选择结构让程序更加智能
  • 什么是C++变量,就是存储数据的盒子
  • C++输入输出流,输出是调试程序最重要的方法