首页 > 系统相关 >shell循环语句

shell循环语句

时间:2022-11-01 09:44:41浏览次数:37  
标签:语句 do shell .. 10 echo 循环 done

循环语句的作用

在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。

例如,根据通讯录中的姓名列表创建系统账号,根据服务器清 单检查各主机的存活状态当面对各种列表重复任务时,使用简单的 if 语句已经难以满足要求,而顺序编写全部代 码更是显得异常烦琐、困难重重

一,for循环

1、语法结构

(1)列表循环
(2)不带列表循环
(3)类C风格的for循环

遍历
for 变量名 in {list}
do
    command
done

for i in {a..c}
do
        echo $i
done

for i in {1..5}    //{}里面不识别变量
do
        echo $i
done


for i in `seq 5`   //seq 5=1、2、3、4、5序列
do      
        echo $i
done

a=10
for i in `seq $a`    //seq可以引用变量
do
        echo $i
done


for 变量名 in a b c
do
    command
done

for i in a b c   //i这里实际没有调用,所以就相当于in后面几个参数就循环几次
do
        echo 123
done

for i in a b c    //这里调用到i变量了,所以就正常显示i的值(a\b\c)
do
        echo $i
done

2.技巧

for i in {1..50..2} 1-50的奇数

for i in {2..50..2} 1-50的偶数

for i in {10..1}  1-10倒序排列

for i in $(seq 10)  1-10正序排列

for i in $(seq 10 -1 1) 1-10倒序排列

for i in $(seq 1 2 10) 1-10的奇数,中间为步长

for i in $(seq 0 2 10) 1-10的偶数,中间为步长

例子:
for i in $(seq 0 2 10);do  echo $i ;done 

3,示例

1.打印1-5这5个数字
vim for.sh
#!/bin/bash

for i in {1..5}
  do
        echo $i
  done
  
2.打印5次hello world
注意:虽然我们定义了一个变量i,但是没有使用它,它只是控制循环次数
vim for.sh
#!/bin/bash

for i in {1..5}
  do
        echo hello world
  done

3.输出0-50之间的偶数
vim for1.sh

#!/bin/bash
for i in {0..50..2}  //..2代表步长为2,每隔2个
do
        echo $i
done

4.类C风格的for循环
for ((expr1;expr2;expr3))
do
command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

1.打印1-5
迭代
vim for.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
     echo $i
done

2.打印1-10的奇数

[root@server ~]# vim for3.sh
#!/bin/bash
for ((i=1;i<=10;i+=2))   //i=i+2
do
     echo $i
done

3.脚本批量添加用户=====
#!/bin/bash
ULIST=$(cat /root/users.txt) 

for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null 
done

注:i++ : i=1+1 先赋值再运算 i=1 之后 再 +1
++i : 1+1=i 先运算再赋值 1+1 之后 再=i

二,while循环

while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环

1.语法结构:

while 表达式
do
command
done

1.打印1-5
vim while.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
    echo $i
    let i++   //注意这里如果不改变$i的值,会变成死循环
#	i=$[$i+1]  //两种写法
done
echo "最后i的值为: $i"

2.输出1-100之间不能被3整除的数字
vim 3.sh 

#!/bin/bash
i=1
while [ $i -le 100 ]
 do
 if [[ $i%3 -ne 0 ]]
 then echo "$i"
 fi
 let i++
done

2.while死循环

while [ 1 -eq 1 ] //写一个永远为真的表达式,1等于1这个条件永远为真,所以这个脚本会一直循环下去
do
command
done

while true
do
command
done

while :
do
command
done

猜数字,猜不对就一直猜
num=10
while true
do
read -p "请输入数字:" shu
if [ $shu -eq $num ];then
        echo "你猜对了"
        break
elif [ $shu -gt $num ];then
        echo "你猜大了"
elif [ $shu -lt $num ];then
        echo "你猜小了"
fi
done

三,until循环

1.跟while相反,条件为假进入循环,条件为真退出循环

语法结构
until 表达式
do
command
done

2.死循环结构

until false
do
command
done

until [ 1 -ne 1 ]
do
command
done

四,循环控制语句

for循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循环的情况,控制循环的命令有以下3个

1、continue
继续,但不会执行循环体内下面的代码了,开始重新开始下一次循环

例1:打印1-5的数字,3不打印
vim for4.sh

#!/bin/bash
for ((i=1;i<=5;i++))
do
        if [ $i -eq 3 ];then
        continue
        else
        echo $i
        fi
done
结果是1245,3不输出,因为跳出后面的echo语句执行下一次循环了

2、break
打断,马上停止本次循环,执行循环体外的代码

例2:1-10的数字,7后面的都不打印
vim for4.sh

#!/bin/bash
for ((i=1;i<=10;i++))
do
        if [ $i -eq 8 ];then
        break
        else
        echo $i
        fi
done


3、exit
直接跳出程序,后面可跟状态返回码如exit 1等等

for i in {1..5}
do
if [ $i -eq 3 ];then
        exit  100 
else
        echo $i
fi

done
echo hi
直接跳出程序所以不会执行最后的echo hi,并且返回码是100通过$?查看

标签:语句,do,shell,..,10,echo,循环,done
From: https://www.cnblogs.com/y0226/p/16844759.html

相关文章

  • 循环链表解决约瑟夫问题
    定义人类结构体publicclasspeople{intnum;peoplenext;publicpeople(intnum){this.num=num;}publicintgetNum(){......
  • 运行shell脚本提示“语法错误: 未预期的文件结尾”
    当时正在写一个小需求,shell脚本实现的功能是:通过read读入变量实现加减剩除等,而且要判断一个输入的2个变量是否为空,为空值则退出。输入的变量不是数字则退出。自己编写的代......
  • Excel导入数据批量生产建表sql语句
    一、导入jar包1、commons-collections4-4.1.jar2、jxl-2.6.12.jar3、poi-3.17.jar4、poi-ooxml-3.17.jar5、poi-ooxml-schemas-3.17.jar6、spring-core-4.3.19.RELEASE7、xm......
  • python中的for循环
    #答疑#问题:#1.运行出来的数据不符合#2.报错#写代码要层层递进#作业要写注释啊!!!!!!#1.range()#范围,区间print('1.range()')#range()#起始值,结束,步长......
  • shell编程 不全
    shell编程>>>![image-20220331084804558](C:\Users\Windows\AppData\Roaming\Typora\typora-user-images\image-20220331084804558.png)>>>>![image-202203310850......
  • PowerShell DSC由哪个进程运行?
    查询msft_providersGet-WmiObjectmsft_providers|selectprovider获得进程$dscProcessID=Get-WmiObjectmsft_providers|Where-Object{$_.provider-like'ds......
  • 功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素
    功能要求:定义一个两行三列的二维数组names并赋值,使用二重循环输出二维数组中的元素names={{"tom","jack","mike"},{"zhangsan","lisi","wangwu"}};运行结果效果:代码:public......
  • 学习笔记-无字母数字Webshell
    无字母数字Webshell相关文章&Source&Reference记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)一些不包含数字和字母的webshell无字母数字W......
  • sqlserver执行语句返回刚刚插入的ID
     sqlserver执行语句返回刚刚插入的ID #region----新增一条活动表数据----///<summary>///新增一条活动表数据///</summary>/......
  • shell脚本之函数
    函数定义函数格式一:function函数名{命令序列}格式二:函数名(){命令序列}#####main#####可以直接在主代码区直接使用函数名调用函数删除函数格式:unset 函......