Shell循环语句


前言

 面对列表重复任务时,if语句难以满足需求,按着顺序编写,又非常耗时间,这时候就需要使用循环语句来解决这个问题。


一、echo 操作

1.1. echo 命令属性

echo -n 表示不换行输出

echo -e 输出转义字符,将转义后的内容输出到屏幕上

常用参数:

-n:不要在最后自动换行;
-e:若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出(允许解释加反斜线的转义字符)
常用的转义字符如下作用
\a发出警告声
\b删除前一个字符,相当于退格(backspace)键,前提是 \b 后存在字符
\c不换行输出,最后不加上换行符号,相当于 echo -n
\f换行但光标仍旧停留在原来的位置
\n换行且光标移至行首
\r光标移至行首,但不换行,相当于使用"\r“以后的字符覆盖”\r“之前同等长度的字符;
但是当”’\r“后面不存在任何字符时,” \r"前面的字符不会被覆盖
\t转以后表示插入tab,即横向制表数
\v\v与 \f作用相同
换行但光标仍旧停留在原来的位置
\\表示插入
\字符本身

案例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

通过一条 echo 语句完成磁盘的格式化。

echo -e "n\np\n\n\n+2G\nw\n" | fdisk /dev/sdb
n新建 回车 p主分区 回车 分区号回车 起始回车 +2G回车 w保存回车

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2.结合echo实现其他功能

1.2.1.功能一:字符串截取1

echo "11,22,33"
11,22,33
i=`echo "11,22,33"`

//从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%,*}
11,22

//从最后倒数到最长的匹配部分(用%%)后面的逗号的地方都被删除
echo ${i%%,*}
11

//从开头到最短的匹配部分(用)后面的逗号的地方被删除
echo ${i#*,}
22,33

//从开头到最长的匹配部分(用##)后面的逗号的地方被删除
echo ${i##*,}
33

%#代表删除
在这里插入图片描述

1.2.2.功能二:字符串截取2

起始下标从0开始
在这里插入图片描述

1.2.3.功能三:获取变量长度

在这里插入图片描述
案例:
截取从下表4开始,长度为的3的数
在这里插入图片描述

二、循环语句

2.1. for 循环语句

  • for语句需要定义一个变量和取值列表,根据不同的取值执行相同的命令,直到变量值用完。
  • 取值列表里包含多个属性相同的对象,例如:IP地址,通信录等。
  • 这是 遍历 的操作

2.1.1. for 语句结构

for 变量名 in 取值列表
do
  命令序列
done

在这里插入图片描述

shell 中有两种用法:

for i in $(seq 1 5);
for ((i=1;i<=5;i+=2));

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
案例1:

  • 批量添加用户
  • 用户名存放在users.txt文件中,每行一个初始密码均设为123456
  • 验证脚本

在这里插入图片描述
vim users.txt
在这里插入图片描述
vim demo1.sh

在这里插入图片描述
cat /etc/passwd

在这里插入图片描述
cat /etc/shadow
在这里插入图片描述

案例2:

  • 根据IP 地址检查主机状态
  • IP地址存放在ipadds.txt 文件中,每行一个
  • 使用ping 命令检测各主机的连通性
根据IP地址检查主机状态;IP地址存放在ipadds.txt文件中,每行一个;
#!/bin/bash
#
a=`cat ~/test/ipadds.txt`

for i in $a
do
  ping -c 3 -i 0.5 -W 2 $i &>/dev/null
  if [ $? -eq 0 ];then
    echo "$i 主机在线"
  else
    echo "$i 主机不在线"
  fi
done

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2. while 循环语句

  • 根据特定条件反复执行一个命令序列,直到不满足条件为止。
  • 编写时可能会出现死循环,要避免这种情况发生
  • true(真)和false(假)为特殊条件测试操作,也可以在if语句的条件测试中使用。
  • true作为条件时,表示条件永远成立,无限执行,也就是死循环,需要强制终止
  • false作为条件时,表示条件不成立,不执行命令序列
  • 一个迭代的过程

2.2.1.while语句结构

while 条件测试操作
do
  命令序列
done

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

案例1:

  • 批量添加用户
  • 用户名称以stu开头,按数字顺序进行编号
  • 一共添加20个用户,即stu1、stu2、…、stu20
  • 初始密码均设为123456
    在这里插入图片描述
    在这里插入图片描述

案例2:

  • 猜商品价格游戏
  • 通过变量RANDOM获得随机数
  • 提示用户猜测并记录次数,猜中后退出循环
通过变量RANDOM获得0-999随机数
提示用户猜测并记录次数,猜中后退出循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3. until 循环语句

重复测试某个条件,只要条件不成立则反复执行,直到条件为止。

和 while 是完全相反的:

  • while是表达式正确才执行循环体,错误结束循环;
  • until 是表达式错误才会执行循环体,正确结束循环。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值