ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

shell脚本的for循环,while循环,until循环语句

2021-08-01 22:05:08  阅读:401  来源: 互联网

标签:shell ping echo while 循环 done root until


文章目录

一,for循环

1.1 for循环格式

for ((i=1;i<=10;i++));  # 变量i赋值1,判断变量i是否小于等于10,如果成立,则i值+1‘,等同((i=1;i<=10;i=$[i+1]))。 i=1 是初始化一个变量,i<=10 是循环条件,i++是循环条件变更步长,每次加1。
do
		echo $i              #打印变量i 的值
done

会输出1到10
在这里插入图片描述
编辑for.sh
在这里插入图片描述
在这里插入图片描述
那么如何隔两位输出结果呢?
例如13579
在这里插入图片描述
在这里插入图片描述

1.1.2一般循环

for 变量名 in  取值列表
do
		命令序列
done
取值列表释义
for i in “值1” “值2”变量i 依次取值 “值1”,“值2”
for i in /root/*变量i 依次取值 /root/ 下的文件/目录名
for i in /etc/*.conf变量i 依次取值 /etc/ 下,以 .conf 结尾的文件/目录
for i in $(seq 10 -1 1)变量i 依次取值,从10 到1 ,步长是 -1
for i in {1.10}
for i in $(ls /root/)变量i 依次取值,为 ls /root/ 命令的执行结果
for i in $(< /etc/passwd )变量i 依次取值, /etc/passwd 的文件每一行内容
for i in $1 $2 $@变量i 依次取值,参数1,参数2 ,及所有参数个数

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

[root@caoyuzhou ~]# vim for.sh
#!/bin/bash
for i  in  $(seq 5 -1 1)     #从5到1,每次变化步长是 -1 。变量 $i 取值从 5 到 1
do
    echo $i
done 

在这里插入图片描述

[root@caoyuzhou ~](https://www.icode9.com/i/ll/?i=c53bd825354e4d1a93d069b5954cb088.png)
# vim for.sh
#!/bin/bash
for  i in {1..5}      #{1..5},从1到5的连续整数, 变量 $i 取值1 到 5
do
    echo $i
done

在这里插入图片描述

[root@caoyuzhou ~]# vim for.sh
#!/bin/bash
for i  in  $(ls /opt/)      # 命令ls /opt/ 执行的结果作为变量 $i 的值(获得的是/opt/目录下的数据的相对路径)
do
    echo $i
done 

在这里插入图片描述

[root@caoyuzhzou ~]# vim for.sh 
#!/bin/bash
for i  in  $(<userlist)    # "<",为重定向输入,变量 $i 取值是 文件userlist的内容。
do
    echo $i
done

在这里插入图片描述

1.2 小练习

使用for循环检测网络中存活的主机ip

[root@host103 opt]# vim  myforping.sh 
#!/bin/bash
for  ip in {1..255}
do
{
    ping  -c 3  -i 0.5 -w 2  192.168.23.$ip &> /dev/null  # ping 命令 -c:ping次数 ; -i 每次发送ping 包间隔时间  ;  -w ping 开始后多少秒结束
     if [ $? -eq 0 ];then                                #ping 命令的返回值。通了,返回0,不通返回非零
            echo "$ip is up" >> /root/ping.txt
    else
         echo "$ip is down " >> /root/ping.txt
     fi
}&                                       #将 整个 ping 和 判断 放入后台并行执行,效率更高
done
wait
cat /root/ping.txt
rm -rf /root/ping.txt

在这里插入图片描述

[root@caoyuzhou ~]# echo "zhangsan
> lisi
> wangwu" > /test/userlist                #保存用户名的文件

[root@host103 test]# vim UserAdd.sh
#!/bin/bash
for Name in $(</test/userlist)            #for 循环 从用户名文件中读取数据
do
    id $Name &> /dev/null                #查看用户是否存在。存在,返回值为0,不存在,返回值为非零
    Status=$?                        
    if [ $Status -eq 0 ];then      
        echo "$Name" is exist
    else
        useradd -m -p "123456" $Name      #用户不存在,则创建用户,并设置密码是"123456"
        echo  "$Name  created"
    fi
done

在这里插入图片描述

二 :while 循环

重复性测试某个条件,只要条件成立,则反复执行

2.1 while循环格式

while 条件测试
do
	命令序列
done

在这里插入图片描述

2.2 while 循环练习

使用 while 循环完成猜数小游戏

#!/bin/bash

NUM=$[RANDOM%1000]            #取 0-999 的随机数
usernum=-1
a=0
while [ $usernum -ne $NUM ]               #一直猜数,直到猜对
do
    echo "Enter q or Q to exit"
    read -p "input your number: " usernum
    let a++                                           #每次猜数,变量 a 值加1
    
    if [[ $usernum == "q"  || $usernum == "Q" ]];then     # 当输入 q 或者 Q 则退出游戏
        echo "您退出了游戏"
        return                                           

    elif [ $usernum -gt $NUM ];then               
        echo "your number is bigger "             #如果用户猜大了,则给出提示信息
        echo ""                                   #输出空行,显得更加好看
    else
        echo "your number is smaller"             #用户猜小了,也给出提示信息
        echo ""
    fi
done
echo "you win "
echo "The num is $NUM"                           #告诉用户 数字是多少
echo "你一共猜了$a次"                              #告诉用户一共猜了几次            

在这里插入图片描述

三:until 循环

until 语句,重复测试某个条件,只要条件不成立则反复执行

3.1 until 语句格式

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

3.2 until 练习

使用 until 计算 1-50 的和值

#!/bin/bash

a=1          #设置 变量a的 初始值为1
sum=0        #sum 用来接计算的和值 
until [ $a -gt 50 ]          #until 条件不成立时循环。 当a 值 大于50 时,退出循环。
do
    sum=$[$sum + $a ]       #每次循环,变量sum的值 都为原 sum 值加上变量a的值 .最后的值,即为1到50 的和值
    let a++                 #每次循环,变量 a 的值+1
done

echo "从1 到 50 的和值是 $sum"   #打印 1-50 的和值

在这里插入图片描述

标签:shell,ping,echo,while,循环,done,root,until
来源: https://blog.csdn.net/OSoooo/article/details/119133782

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有