Shell编程之循环语句(for、while、until)、函数(递归函数)、数组

本文详细介绍了Shell编程中的循环语句(for、while、until)、函数(包括递归函数)以及数组的使用。通过实例展示了如何批量添加/删除用户、检查主机状态、输出数字、使用let命令、计算奇偶数和、实现猜商品价格游戏等。此外,还讨论了continue和break的用法、数组的应用场景和定义方法,以及Shell函数的定义、调用、参数传递和作用范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:循环语句

1.1:for循环语句

1.1.1:for语句结构

  • 读取不同的变量值,用来逐个执行同一组命令
语句结构 
for 变量名 in 取值列表 
do 
           命令序列 
done
语句结构举例 
for 收件人 in 邮件地址列表 
do 
            发送邮件 
done

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89ztcS9m-1595511349802)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200721213651184.png)]

1.2:for语句应用示例

1.2.1:批量添加/删除用户

添加需求描述:

  • 用户名存放再users.txt文件中,每行一个
  • 初始密码均设为123456
  • 验证脚本
[root@localhost ~]# vim /opt/users.txt
tom
zhangsan
lisi
wangwu
[root@localhost ~]# vim users.sh
#!/bin/bash
#定义
list=`cat /opt/users.txt`
#遍历集合
for user in $list
do
    #添加用户
    useradd  $user
    #设置密码
    echo "123456" |passwd --stdin $user
    echo "设置${user}用户成功"
done
[root@localhost ~]# sh users.sh 
更改用户 tom 的密码 
passwd:所有的身份验证令牌已经成功更新。
设置tom用户成功
更改用户 zhangsan 的密码 
passwd:所有的身份验证令牌已经成功更新。
设置zhangsan用户成功
更改用户 lisi 的密码 
passwd:所有的身份验证令牌已经成功更新。
设置lisi用户成功
更改用户 wangwu 的密码 
passwd:所有的身份验证令牌已经成功更新。
设置wangwu用户成功

删除需求描述:

  • 删除上面添加的用户
[root@localhost ~]# vim users.sh
#!/bin/bash
#定义
list=`cat /opt/users.txt`
#遍历集合
for user in $list
do
    #删除用户
    userdel  $user
    #设置密码
    #echo "123456" |passwd --stdin $user
    echo "删除${user}用户成功"
done
[root@localhost ~]# sh users.sh
删除tom用户成功
删除zhangsan用户成功
删除lisi用户成功
删除wangwu用户成功

1.2.2:根据IP地址检查主机状态

需求描述:

  • IP地址存放再hosts.txt文件中,每行一个
  • 使用ping命令检测各主机的连通性
[root@localhost opt]# vim hosts.txt 
20.0.0.1
192.168.100.100
20.0.0.2
[root@localhost opt]# vim pingip.sh
#!/bin/bash
#定义集合
list=`cat /opt/hosts.txt`
#遍历集合
for IP in $list
do
    ping -c 3 -i 0.2 -W 3 $IP > /dev/null
    #条件判断
    if [ $? -eq 0 ];then
       echo "$IP is on"
    else
       echo "$IP is down"
    fi
done
[root@localhost opt]# sh pingip.sh 
20.0.0.1 is down
192.168.100.100 is down
20.0.0.2 is on

1.2.3:用循环语句输出1-10的数字的方式

  • 方式一:
#!/bin/bash 
for ((i=1;i<=10;i++)) 
do        
       echo "$i" 
done
  • 方式二:
#!/bin/bash 
i=1 
for ((;i<=10;i++)) 
do        
          echo "$i" 
done
  • 方式三:
#!/bin/bash 
i=1 
for ((;i<=10;)) 
do       
             echo "$i"        
let i++ done
  • 方式四:
#!/bin/bash 
i=1 
for ((;;)) 
do  
     if [ $i -le 10 ];then       
            echo "$i"        
            let i++  
      else       
              exit 0  
      fi 
done
  • 四种方式输出结果都是一样的
[root@localhost opt]# ./number.sh  
1 
2 
3 
4 
5 
6 
7 
8 
9 
10

1.2.4:shell中let命令

  • let 对整数进行数学运算

  • let和双小括号 (( )) 一样,let 命令也只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。

语法格式 
let 表达式 
或 
let "表达式"let '表达式' 

以上方式都等价于 ((表达式))

  • 当表达式中含有 Shell 特殊字符(例如 |)时,需要用双引号" "或者单引号' '将表达式包围起来。
  • 和 (( )) 类似,let 命令也支持一次性计算多个表达式,并且以最后一个表达式的值作为整个 let 命令的执行结果。

1.2.5:计算1-10偶数/奇数的和

方式一:计算偶数的和

#!/bin/bash
sum=0
#循环
for ((i=0;i<=10;i+=2))
do
    let sum+=$i
done
echo "和为:${
     sum}"
[root@localhost opt]# sh oushuhe.sh 
和为:30

计算奇数的和

#!/bin/bash
sum=0
#循环
for ((i=1;i<=10;i+=2))
do
    let sum+=$i
done
echo "和为:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值