0
点赞
收藏
分享

微信扫一扫

shell循环语句

老北京的热干面 2022-02-14 阅读 137

循环语句的作用

在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。
例如,根据通讯录中的姓名列表创建系统账号,根据服务器清 单检查各主机的存活状态当面对各种列表重复任务时,使用简单的 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通过$?查看


举报

相关推荐

0 条评论