Shell编程之循环语句

目录

前言:

一:for循环语句

1.for语句结构

结构解释

2.for语句应用实例

二:while循环语句

常见使用场景

1.while语句的结构

结构解释

三:until循环语句

常见使用场景

1.until结构

结构解释

2.until实例

总结


前言:

在 Shell 编程里,循环语句是极为关键的工具,它为处理重复性任务带来了极大的便利。在实际的编程工作中,你常常会碰到需要多次执行相同操作的情况,像批量处理文件、遍历列表中的元素、循环执行某个命令直至满足特定条件等。要是没有循环语句,每次执行这些操作都得手动重复代码,这不仅效率低下,还容易出错。

循环语句能够让你编写一段代码,然后依据特定的规则多次执行它,从而显著提升代码的复用性与效率。Shell 中提供了多种循环语句,例如for循环、while循环和until循环,每一种循环语句都有其独特的使用场景与优势。掌握这些循环语句的使用方法,能够让你更加高效地编写 Shell 脚本,处理各种复杂的任务。接下来,让我们一起深入学习 Shell 编程中的循环语句吧。

一:for循环语句

在 Shell 编程里,for循环是一个常用的控制结构,它的用途是对一系列的值进行遍历,并且针对每个值执行特定的命令集。

1.for语句结构

这是 Shell 中最常用的 for 循环结构,主要用于遍历列表中的元素。

命令格式:

 for 变量名 in 值列表
 do
     命令序列
 done
结构解释
  • for:这是循环的起始关键字,表明接下来要定义一个 for 循环。

  • 变量名:在每次循环迭代时,值列表 中的元素会依次赋值给这个变量。你可以使用任意合法的变量名,一般会选择与循环处理内容相关的名称,方便代码理解。

  • in:用于分隔变量名和值列表,表明后面跟随的是要遍历的值列表。

  • 值列表:可以是由空格分隔的一系列值,也可以是数组、命令替换的结果等。例如,"apple" "banana" "cherry"$(seq 1 5) 等。

  • do:表示循环体的开始,之后的 命令序列 就是每次循环要执行的操作。

  • 命令序列:可以包含一个或多个 Shell 命令,用于对每次循环中变量的值进行处理。

  • done:标志着循环体的结束。

2.for语句应用实例

​
 #创建一个员工列表,并给它设置密码并创建出来
 [root@localhost ~]# vim user.txt  #创建员工名单
 zhangsan
 lisi
 wangwu
 [root@localhost ~]# vim usadd.sh  #添加用户的脚本
 #!/bin/bash
 ulist=$(cat /root/user.txt)
 for uname in $ulist
 do
     useradd $uname
     echo "12456" | passwd --stdin $uname &> /dev/null
 done
 ​
 [root@localhost ~]# tail -3 /etc/passwd  #确认结果
 zhangsan:x:1000:1000::/home/zhangsan:/bin/bash
 lisi:x:1001:1001::/home/lisi:/bin/bash
 ​
 ​
 #如果想要删除用户,可以使用以下的脚本
 [root@localhost ~]# vim usadd.sh  #添加用户的脚本
 #!/bin/bash
 ulist=$(cat /root/user.txt)
 for uname in $ulist
 do
     userdel -r $uname &>/dev/null
 done

​

 

二:while循环语句

常见使用场景

  • 用户交互:在需要不断与用户进行交互,直到满足特定条件才停止的场景中使用,例如让用户输入密码,直到输入正确为止。

  • 监控任务:持续监控某个系统状态或者文件内容,当状态改变或者文件内容符合特定条件时执行相应操作。

  • 处理未知数量的数据:当需要处理的数据数量不确定时,可以使用while循环不断读取数据,直到数据读取完毕。

1.while语句的结构

 while 条件测试
 do
     命令序列
 done

结构解释

  • whilewhile循环的起始关键字,表明接下来要定义一个while循环。

  • 条件测试:这是一个命令或者表达式,用于判断循环是否继续执行。通常使用test命令(可简写为方括号[ ])或者双括号(( ))进行算术测试,也可以使用其他命令的返回状态码来判断。如果条件测试的返回状态码为 0(表示真),则执行循环体;否则,退出循环。

  • do:表示循环体的开始,之后的命令序列就是每次循环要执行的操作。

  • 命令序列:可以包含一个或多个 Shell 命令,用于实现具体的功能。

  • done:标志着循环体的结束。

2.while语句应用实例:

 
#写一个猜商品价格的脚本
 [root@localhost ~]# vim aaa.sh
 #!/bin/bash
 price=$(expr $RANDOM % 1000)
 times=0
 echo "请输入商品价格,猜猜看多少?"
 while true
 do
     read -p "请输入你猜测的数:" INT
     let times++
     if [ $INT -eq $price ]
     then
         echo "恭喜你猜对了,价格为$price"
         echo "你总共猜了$times 次"
         exit 0
     elif [ $INT -gt $price ]
     then
         echo "太高了"
     else 
         echo "太低了"
     fi
 done

 [root@localhost ~]# bash aaa.sh  #验证结果
 请输入商品价格,猜猜看多少?
 请输入你猜测的数:500
 太低了
 请输入你猜测的数:750
 太高了
 请输入你猜测的数:650
 太高了
 请输入你猜测的数:575
 太低了
 请输入你猜测的数:600
 太低了
 请输入你猜测的数:625
 太低了
 请输入你猜测的数:630
 太低了
 请输入你猜测的数:645
 太高了
 请输入你猜测的数:640
 太高了
 请输入你猜测的数:635
 恭喜你猜对了,价格为635
 你总共猜了10 次
 ​
 ​

三:until循环语句

常见使用场景

  • 等待特定条件达成:例如等待某个服务启动成功、某个文件生成完成等。

  • 重试机制:在某个操作失败时,不断重试,直到操作成功。

1.until结构

 until 条件测试
 do
     命令序列
 done

结构解释

  • untiluntil循环的起始关键字,表明接下来要定义一个until循环。

  • 条件测试:这是一个命令或者表达式,用于判断循环是否继续执行。如果条件测试的返回状态码为非零(表示假),则执行循环体;当条件测试的返回状态码为 0(表示真)时,退出循环。通常使用test命令(可简写为方括号[ ])或者双括号(( ))进行算术测试,也可以使用其他命令的返回状态码来判断。

  • do:表示循环体的开始,之后的命令序列就是每次循环要执行的操作。

  • 命令序列:可以包含一个或多个 Shell 命令,用于实现具体的功能。

  • done:标志着循环体的结束。

2.until实例

 ​
 #写一个shell脚本,用于给已登录的用户发送信息,对用户进行检测,必须是系统内用户且处于登录的状态,通过linux的write命令发送消息
 [root@localhost ~] vim send_message.sh
 #!/bin/bash
 ​
 # 检查输入参数是否为两个
 if [ $# -ne 2 ]; then
     echo "用法: $0 <用户名> <消息>"
     exit 1
 fi
 ​
 username=$1
 message=$2
 ​
 # 检查用户是否存在于系统中
 if ! id "$username" &> /dev/null; then
     echo "用户 $username 不存在于系统中。"
     exit 1
 fi
 ​
 # 检查用户是否已登录
 if ! who | grep -q "$username"; then
     echo "用户 $username 未登录。"
     exit 1
 fi
 ​
 # 向用户发送消息
 write "$username" <<< "$message"
 ​
 if [ $? -eq 0 ]; then
     echo "消息已成功发送给 $username。"
 else
     echo "发送消息给 $username 时出错。"
 fi    
 #验证结果
 [root@localhost ~]# ./send_message.sh root hell0
 write: root 登录了多次;将记入 pts/0
 消息已成功发送给 root。
 [root@localhost ~]# ./send_message.sh zhangsan hell0
 消息已成功发送给 zhangsan。
 ​
 ​

总结

该文档围绕 Shell 编程中的循环语句展开,阐述了循环语句在处理重复性任务时能提升代码复用性与效率,详细介绍了for(用于遍历列表元素,如批量创建或删除用户)、while(适用于用户交互、监控任务和处理未知数量数据,如猜商品价格脚本)、until(用于等待特定条件达成或重试机制,如给已登录用户发送消息脚本)三种循环语句的结构、使用场景及应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值