我们一起来学Shell - shell的循环控制

简介: 我们一起来学Shell - shell的循环控制

Shell 循环之 for 语句

for循环的运作方式,是将串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。

其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。

语法结构

for 变量 in 值集合
do
    执行命令
done
  • for 每次从值集合中取一个值赋值给变量
  • do - done 将赋值后的变量带入执行的命令得到执行结果 ,
  • 重复以上两个步骤,直到值集合中的值被 一 一 获取赋值给变量得到所有结果,循环结束

列出 var 目录下各子目录占用磁盘空间的大小

#!/usr/bin/env bash
DIR="/var"
for i in $(ls ${DIR})
do
    [ -d "${DIR}/$i" ] && du -sh ${DIR}/$i
done

用 for 循环创建 demo1-demo10 目录,然后在 demo1-demo10 目录下创建 test1-test10 目录

#!/usr/bin/env bash
for i in $(seq 1 10)
do
    mkdir /tmp/demo${i}
    for j in $(seq 1 10)
    do
        mkdir /tmp/demo${i}/test${j}
    done
done

for循环 - 99 乘法表

#!/usr/bin/env bash
for (( i=1; i<=9; i++ ))
do
    for (( j=1; j<=i; j++ ))
    do
        let "k=${i}*${j}"
        echo -ne "${i}*${j}=${k}\t"
    done
    echo " "
done

Shell 循环之 while 语句

语法格式

while 条件测试
do
    执行命令
done
  • while 首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则不进入循环
  • 满足 while 测试条件,执行命令区域,直到 while 的测试条件不满足结束执行while循环(如果条件一直满足执行无穷循环)。

while循环 - 99 乘法表

#!/usr/bin/env bash
a=1
b=1
while (( a <= 9 ))
do
    while (( b <= a ))
    do
        let "c=${a}*${b}"
        echo -ne "${a}*${b}=${c}\t"
        let b++
    done
    let a++
    let b=1
    echo " "
done

Shell 循环之 until 语句

while循环的条件测试是测真值,until循环则是测假值。

语法格式

until 条件测试
do
    执行命令
done
  • until 条件测试结果为假(传回值不为0),就进入循环。
  • 条件测试不满足,执行命令区域。直到 until 条件满足,结束执行until 循环(如果条件一直不满足则执行无穷循环)。

until循环 - 99 乘法表

#!/usr/bin/env bash
a=1
b=1
until (( a > 9 ))
do
    until (( b > a ))
    do
        let "c=${a}*${b}"
        echo -ne "${a}*${b}=${c}\t"
        let b++
    done
    let a++
    let b=1
    echo " "
done

Shell 循环控制

break,continue,exit 一般用于循环结构中控制循环的走向。

命令 说明
break n n 表示跳出循环的次数,如果省略 n 表示跳出整个循环
continue n n 表示退到第n层继续循环,如果省略n表示跳过本次循环进入下一次循环
exit n 退出当前的shell程序,并返回 n,n 也可以省略
return 用于返回一个退出值给调用的函数
shift 用于将参数列表list左移指定次数,最左端的那个参数就从列表中删除,其后边的参数继续进入循环
break指令

break[N]:提前结束第N层循环,最内层为第1层

语法格式

while CONDITION1; do
      CMD1
      ...
      if CONDITION2; then
                break
      fi
      CMDn
      ...
done

当数字等于3的时候,则跳出循环,输出”game over”,循环结束后,输出“complate”

#!/usr/bin/env bash
for (( i=0; i<=9; i++ ))
do
    if [ $i -eq 3 ]; then
        echo "game over"
        break
    fi
        echo $i
done
echo "complate"
  • break:结束本次循环(整个),退出脚本
continue 指令

continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层

语法格式

while CONDITION1;do
      CMD1
      ...
      if CONDITION2; then
                continue
      fi
      CMDn
      ...
done

当数字等于3的时候,输出“game over”

#!/usr/bin/env bash
for (( i=0; i<=9; i++ ))
do
    if [ $i -eq 3 ]; then
        echo "game over"
        continue
    fi
        echo $i
done
  • continue:提前结束本次循环,提前进入下一轮循环
exit 指令

退出当前的shell,和break的区别在于,break只是跳出了循环,后续的内容,任然会继续执行,但是exit是直接退出程序,后续的内容,不再执行

当数字等于3的时候,输出“game over”,并退出当前的shell

#!/usr/bin/env bash
for (( i=0; i<=9; i++ ))
do
    if [ $i -eq 3 ]; then
        echo "game over"
        exit 1
    fi
        echo $i
done
shift 指令
  • shift 命令用于将参数列表 list 左移指定次数,最左端的那个参数就从列表中删除,其后边的参数继续进入循环。
  • shift[N]:用于将参量列表 list 左移指定次数,缺省为左移一次。
  • 参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。
  • while 循环遍历位置参量列表时,常用到 shift

输出一个三角形

#!/usr/bin/env bash
while [[ $# > 0 ]]
do
    echo $*
    shift
done

运行脚本

sh study.sh 1 2 3 4 5 6

结果如下

1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6

一个一个输出

#!/usr/bin/env bash
while [[ $# > 0 ]]
do
    echo $1
    shift
    sleep 1
done

行脚本

sh study.sh 1 2 3 4 5 6

结果如下

5
4
3
2
1


目录
相关文章
|
1月前
|
存储 运维 Shell
shell中for while until 三种循环的用法
shell编程中,有几种常见的循环结构,包括for循环、while循环和until循环,总的来说,循环shell编程中扮演着至关重要的角色,它们使得自动化任务变得更加容易,提高了效率,并且可以处理各种各样的编程需求。
270 13
shell中for while until 三种循环的用法
|
1月前
|
人工智能 机器人 Shell
【shell】shell条件判断、循环语句、基本运算符
【shell】shell条件判断、循环语句、基本运算符
|
1月前
|
Shell
在Shell脚本中,`for`循环
在Shell脚本中,`for`循环
34 2
|
8月前
|
Shell
shell里的for循环详解
shell里的for循环详解
130 0
|
8月前
|
Shell
shell里的while循环详解
shell里的while循环详解
96 0
|
7天前
|
Shell UED Python
Shell 循环语句:重复任务的自动化利器
在Shell脚本中,循环语句如`while`和`for`是自动化任务的关键。`while`循环在条件满足时执行,例如计算1到100的和;`for-in`循环遍历列表,可用于迭代指定数值或命令输出,如求1到100的和。`select-in`循环提供交互式菜单,增强脚本用户体验。理解并运用这些循环能提升脚本效率和可读性。现在,动手试试吧!
12 2
|
21天前
|
Shell Linux
shell循环读文件 Linux脚本读文件
shell循环读文件 Linux脚本读文件
15 3
|
21天前
|
机器学习/深度学习 Shell Linux
linux shell脚本判断文件或文件夹是否存在循环操作
linux shell脚本判断文件或文件夹是否存在循环操作
24 0
|
25天前
|
机器学习/深度学习 Shell Perl
shell 脚本循环语句
shell 脚本循环语句
|
1月前
|
监控 Shell
shell学习(五) 【循环控制continue,break、while 语法】
shell学习(五) 【循环控制continue,break、while 语法】
17 0