shell脚本循环语句之for循环

shell脚本循环语句之for循环shell 脚本循环语句之 for 循环 1 格式 2 常用参数 echo n 表示不换行输出 echo e 输出转义字符 把转义后的内容输出到屏幕上常用的转义字符如下 b 转义后相当于按退格键 backspace 但前提是 b 后面存在字符 b 表示删除前一个字符 c 不换行输出 在 c 后面不存在字符的情况下 作用相当于 echo n 但是当 c 后面仍让存在字符时 c 后年的字符将不会被输出 n 换行 被输出的字符从 n 处开另起一行 f 换行

shell脚本循环语句之for循环

1、格式

在这里插入图片描述

2、常用参数

echo -n :表示不换行输出

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

\c 不换行输出,在“\c”后面不存在字符的情况下,作用相当于echo -n ; 但是当“\c”后面仍让存在字符时,“\c”后年的字符将不会被输出。

\n 换行,被输出的字符从“\n”处开另起一行

\f 换行,但是换行后的新行的开头位置连接着上一行的结尾

\v 与\ f 相同原理

\t 转以后表示插入tab , 即横向制表符

\r 光标移至首行,但不换行, 相当于使用“ \r ”以后的字符覆盖“\r”之前同等长度的字符;但是当“\r”后面不存在任何字符时,“\r”前面的字符不会被覆盖

\ 表示插入“\”本身

  • -n演示 引用图
    在这里插入图片描述

  • echo -e “\b”的用法 引用图

在这里插入图片描述

for循环语句

1、for循环的结构

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

  • for语句需要定义一个变量和取值列表,根据不同的取值执行相同的命令,知道变量值用完。
  • 取值列表里包含多个属性相同的对象,例如:IP地址,通信录等。
#for语句结构 for 变量名 in 取值列表 do 命令序列 done 

在这里插入图片描述

示例1:for循环的入门,一般都是从求和开始,下面就先就1~100的和。 #!/bin/bash # sum=0 for i in {1..100} do sum=$[$i+$sum] done echo "0-100的和为:" $sum #如果算的是1~100之间每个两位数的和,即{1、3、5、7、...、99},for循环如下: for i in {1..100..2} #其他都是一样的。 

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

在这里插入图片描述

在这里插入图片描述

语句示例补充:下面是求1~100的和的不同表达。(都测试过,这里就不再贴图了,想试的可以复制试试) 格式一: #!/bin/bash # sum=0 for i in $(seq 1 100) #{1、3、5、...、99}相加为$(seq 1 2 100) do sum=$[$i+$sum] done echo "0-100的和为:" $sum 格式二: #!/bin/bash # sum=0 for ((i=1;i<=100;i++)) #隔一个相加, for ((i=1;i<100;i+=2)) do sum=$[$i+$sum] done echo "0-100的和为:" $sum 
示例2:批量添加用户,用户名存放在users.txt文件中,每行一个;初始密码均设为 #!/bin/bash # a=`cat ~/test/users.txt` for i in $a do useradd $i echo "" | passwd --stdin $i &>/dev/null done 

在这里插入图片描述

示例3:根据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 

在这里插入图片描述

二、while循环语句

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




#while语句结构 while 条件测试操作 do 命令序列 done 

在这里插入图片描述

示例1:批量添加用户; 用户名称以stu开头,按数字顺序进行编号; 一共添加20个用户,即stu1、stu2、......、stu20 初始密码均设为 #!/bin/bash # i=1 while [ $i -le 20 ] do useradd stu$i echo "" | passwd --stdin $i &>/dev/null let i++ done 

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




示例2:猜商品价格游戏;通过变量RANDOM获得随机数;提示用户猜测并记录次数,猜中后退出循环 #我这里还加了if语句填了一点其他元素。 #!/bin/bash # a=$(expr ${RANDOM} % 1000) i=0 while true do read -p "猜猜看我想的是哪个数,范围在0~999。" shu let i++ if [ $shu -eq $a ];then if [ $i -le 10 ];then echo "太强了,你猜了$i 次就猜中了,可惜没得奖励。" else echo "猜了$i 次才猜中,你还差的远呢" fi exit 0 elif [ $shu -lt $a ];then if [ $(expr $a - $shu) -le 5 ] ;then echo "虽然数小了,但已经很近了,你在想想" else echo "不好意思,猜的太小了" fi else if [ $(expr $shu - $a) -le 5 ];then echo "虽然数大了,但已经很近了,你在考虑考虑" else echo "不好意思,猜大了,数再小点" fi fi done 

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




三、until循环语句

  • 与while相反,重复测试某个条件,只要条件不成立则反复执行。
  • 一般熟练运用while即可,这个很少用。

在这里插入图片描述

示例:计算1~50的和值;通过循环累加的方式计算1~50的和值 #!/bin/bash # a=0 sum=0 until [ $a -gt 100 ] do sum=$[$sum+$a] let a++ done echo "1-100的和为:$sum" 

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




四、结束循环------break和continue

  • break跳出单个循环
#!/bin/bash for ((a=1; a<=5; a++)) do echo "outer loop: $a" for ((b=1; b<=50; b++)) do if [ $b -eq 5 ] then break fi echo "inter loop: $b" done done 

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




  • continue中止某次循环中的命令,但不会完全中止整个命令
#!/bin/bash for ((a=1; a<=15; a++)) do if [ $a -gt 5 ] && [ $a -lt 10 ] then continue fi echo "current value: $a" done 

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

五、 IFS字段分隔符(补充)

默认包含 空格,制表符,换行符 查看命令:set | grep IFS IFS=$' \t\n' 修改成只换行 IFS=$'\n' IFS=: IFS=',' IFS.OLD=$IFS IFS=$'\n' ... IFS=$IFS.OLD 输出环境变量PATH所包含的所有目录以及其中的所有可执行文件 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220393.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:36
下一篇 2026年3月17日 下午8:36


相关推荐

  • Zener模型

    Zener模型经典的单自由度质量 弹簧 阻尼系统 sdof 系统的特征值有两个 Zener 模型则由弹簧和具有弹性的 第二弹簧 阻尼及两者并联支撑质量的组成 该系统的特征值有三个 一个纯实数以及两个共轭复数 文章分别研究自由振动和强迫振动 简谐激励 白噪声激励 在强迫振动中 还研究了幅值响应 外力传递到刚性基层 Zener 模型对隔振有用 无外激励时 假若第二弹簧的刚度较小 不到主弹簧的 8 倍 则无

    2026年3月19日
    2
  • 私网ip和公网ip_详解

    私网ip和公网ip_详解备注:此博客为转载,原作者地址请点击此处 版权声明:本文为小小呆原创文章,转载请注明出处! https://blog.csdn.net/gui951753/article/details/79210535 &nbsp;IP可以分为PublicIP和Privat…

    2022年6月11日
    41
  • getter和setter怎么用_python setter

    getter和setter怎么用_python setter有时候我们只知道一个对象的字段,我们想通过反射的方式将此字段赋值,可直接写反射又太浪费时间,还需要自己手动拼接方法名,而java为我们提供了一个很方便的类(PropertyDescriptor)来操作这一过程。使用很简单,直接看代码:代码importcom.pibgstar.demo.bean.User;importjava.beans.IntrospectionException…

    2022年10月1日
    4
  • 一文带你了解Redis秒杀应用场景

    一文带你了解Redis秒杀应用场景

    2022年2月20日
    53
  • Oracle ORA-01017 报错处理

    Oracle ORA-01017 报错处理Oracle ORA-01017报错处理背景: 通过toad连接Oracle11gRAC数据库是,发现通过sys用户连接总是报ORA-01017错误,tnsping连接名称是通的,其他用户连接是正常的,反复输入sys账户信息,总提示:1.尝试改sys用户密码,重试报错依旧。 2.使用sys登录GC,报错相同。使用普通用户登录正常。 3.数据库服务器上使用sqlplus

    2022年5月31日
    710
  • qtcpsocket 客户端_qtcpsocket接收结构体数据

    qtcpsocket 客户端_qtcpsocket接收结构体数据实现tcp客户端通信并支持keepAlive探测包#pragmaonce#include<QObject>#include<QTcpSocket>/***********************************************作者:wujianhua*时间:2021/02/25*类介绍:sockettcp客户端通信类************************************************/classT.

    2025年10月13日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号