shell循环语句

shell循环语句1、for循环语法:for变量in值列表/seq(2210)do命令序列done———————–for((初值;条件;步长))do命令序列done————————for变量in{…}do命令序列done示例:循环创建10个系统账户示例2:批量创建用户用户名存放在users.txt的文件,每…

大家好,又见面了,我是你们的朋友全栈君。

1、for循环

语法:

for 变量 in  值列表                    /seq(2 2  10)  
do 
   命令序列
done
-----------------------
for((初值;条件;步长))
do 
   命令序列
done
------------------------
for  变量 in { ... }
do 
   命令序列
done

示例:循环创建10个系统账户

shell循环语句

 示例2:

批量创建用户
用户名存放在users.txt的文件,每行一个
初始密码123456
验证脚本

shell循环语句

 示例:99乘法表

shell循环语句

 示例:

根据IP地址检查主机状态
IP地址存放在ipadds.txt文件中
使用ping命令检测各主机的连通性

shell循环语句

 

1.1、for循环读取文件

for  i  in `cat  文件名`

1.2、示例:生成随机密码

脚本自动生成一个8位随机密码,大小英文字母和数字
字符串长度
${#变量名}
​
截取字符串
${变量名:开始的下标:截取的长度}
​
字符串追加
变量1+=变量2

shell循环语句 1.3、for循环分隔符

默认分隔符  " "  \t  \n    空格  制表符 换行符
当遇见这三类时,会导致换行输出

shell循环语句

 示例:

shell循环语句

IFS_OLD=$IFS
IFS=$'\n'
利于上述,修改IFS,同时在其他命令中利用
IFS=$IFS_OLD
还原规则

1.3.1、示例:换行输出$PATH

shell循环语句

 

1.4、双层循环

for((  ;  ;  ))
do
  for(( ; ; ))
  do
    命令序列
  done
done

1.4.1、示例:99乘法表

#!/bin/bash

for((i=0;i<9;i++))
do
  for((j=0;j<=i;j++))
  do
  sum=i*j
  echo  -n "$i*$j=$sum "
  done

  echo  " " 
done

shell循环语句

1.4.2、示例:打印菱形

#!/bin/bash
           #  行  列   *  行   列
###*          0   2       0    0
##***         1   1       1    2
#*****        2   0       2    4
##***         0   1       0    2
###*          1   2       1    0

#打印上半部分
for((i=0;i<3;i++))
do
  #打印空格
  for((j=0;j<=2-i;j++))
  do
    echo -n " "
  done
  #打印*
  for((j=0;j<=2*i;j++))
  do
    echo -n "*"
  done
echo " "
done
#打印下半部分
for((i=0;i<2;i++))
do
  #打印空格
  for((j=0;j<=1+i;j++))
  do
    echo -n " "
  done
  #打印*
  for((j=0;j<=2-2*i;j++ ))
  do
    echo  -n "*"
  done
echo " "
done

shell循环语句2、while循环

语法:

while 条件测试
do
  命令序列
done

2.1、while循环读取文件

法一

#line 为变量名
while read line   #读取每行文件
do
  echo $line      #输出每行

done < 文件名      #文件名交给while

法二

cat 文件名 | while read line   #读取每行文件
do
  echo $line      #输出每行

done   

2.2、示例1、批量添加用户

批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户,即stu1、stu2、...
初始密码均为123456
#!/bin/bash

i=1
while [ $i -le 20  ] 
do
  useradd stu$i
  echo "123456" | passwd --stdin stu$i
  #i=$[$i+1]
  let i++
done

shell循环语句

 2.3、示例2、猜商品价格游戏

猜商品价格游戏
  通过变量RADNOM获得随机数
  提示用户猜测并记录次数,猜中后退出循环
#!/bin/bash

num=$[$RANDOM % 1000]
#a用于方便退出while循环
a=0
#b用于统计猜测次数
b=0
while [ $a  -eq 0 ] 
do
  read -p "请输入你猜的价格(0-999):" price
  if [ $price -eq $num  ]
  then
    echo "恭喜你,猜对了"
    let b++
    #当猜对时候,就让a变成1,实现退出while操作
    let a++
  elif [ $price -lt $num ]
  then
    echo "猜小了,请继续猜"
    let b++
  elif [ $price -gt $num ]
  then
    echo "猜大了,请继续猜"
    let b++
  fi
done

echo "你一共猜了 $b 次 " 

shell循环语句

 

3、until循环

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

3.1、示例1、计算1-50的和值

通过循环累加的方式计算1-50的和值
#!/bin/bash

i=0
sum=0
until [ $i -gt 50 ] 
do
  sum=$[sum+i]
  let i++
done

echo "1-50的和为 $sum "

shell循环语句

3.2、示例2、为指定用户发送在线消息

若用户不在线(未登录系统),则每10分钟试一次,直至用户登录系统后再发送信息
用户名与消息通过位置参数传递给脚本

shell循环语句

 

4、多线程

利用   实现后台并行执行
do
{

}&
done
wait

示例

#!/bin/bash
#多线程

for((i=1;i<=254;i++))
do
  {
  ping -c 3 -i 0.5 -w 2 192.168.96.$i &> /dev/null
  if [ $? -eq 0 ]
  then
   echo "192.168.96.$i is online" >> /root/shell4/host_ip_online.txt
  else
   echo "192.168.96.$i is offline" >> /root/shell4/host_ip_offline.txt
  fi
  }&
#增加&符号,代表的是将进程放到后台处理,后台命令之间是不区分先来后到关系的
done
#执行wait,等待上面所有后台进程执行完毕后,才会执行后面的语句
#没有wait,后面语句不会等待后台进程的,会对一些需要上下文依赖关系的程序执行错误
wait

cat /root/shell4/host_ip_online.txt
cat /root/shell4/host_ip_offline.txt

shell循环语句

 

5、循环体三种跳出方式

5.1、exit

  • n (0-255) 退出shell脚本进程,并且可以返回指定状态码

  • exit执行后,脚本后面所有语句都不会执行

5.2、break

  • 跳出当前的循环体,去执行循环后面的语句

  • break跳出单层循环,break 2跳出2层循环

5.3、continue

  • 终止某次循环的执行,但是不会完全终止整个循环

  • while until循环中使用需要谨慎,因为continue放在变量迭代语句前会造成死循环

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163938.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)「建议收藏」

    我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)「建议收藏」我是全网最硬核的高并发编程作者,CSDN最值得关注博主,全网最硬核的基于可视化的多数据源数据异构中间件作者,也许现在就是,也是不久的将来就是,大家同意吗?

  • pycharm 程序调试快捷键「建议收藏」

    pycharm 程序调试快捷键「建议收藏」pycharm程序调试快捷键stepinto(F5):进入子函数,不管是遇到系统的子函数还是自己写的子函数,都会进入。stepover(F6):进入子函数,跳过系统的子函数而只进入自己写的子函数stepintomycode(Alt+shift+F7):跳过所有子函数runtocursor(Ctrl+R):运行到光标所在处resumeprogram(F9):运行到下一个断点(程序运行过程中依然可以添加断点)…

  • 域名系统DNS用来解析_网页域名解析错误怎么办

    域名系统DNS用来解析_网页域名解析错误怎么办1、DNSDNS(DomainNameSystem)是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于TCP/IP网络。2、域名系统DNS的作用通常我们有两种方式识别主机:通过主机名或者IP地址。人们喜欢便于记忆的主机名表示,而路由器则喜欢定长的、有着层次结构的IP地址。为了满足这些不同的偏好,我们就需要一种能够进行主机名到IP地址转换的目录服务,域名系统作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。因此,即使不使用域名

    2022年10月15日
  • 利用元素法简单解答空间几何体问题——高等数学

    利用元素法简单解答空间几何体问题——高等数学就像汤家凤老师说的那样:这个思想,厉害了,真的厉害!老师课堂上讲的你可能看不懂,但是看这篇文章,你一定能看懂

  • varchar2和varchar的区别[通俗易懂]

    varchar2和varchar的区别[通俗易懂]1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,大部分情况下建议使用varchar2类型,可以保证更好的兼容性…

  • position和anchorPoint

    position和anchorPoint本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。一、理论概述1.简单介绍CALayer有2个非常重要的属性:position和anchorPoint@propertyCGPointposition;用来设置CALayer在父层中的位置以父层的左上角为原点(0,0) @propertyCGPointanchorPoint;称为“定位点”…

发表回复

您的电子邮箱地址不会被公开。

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