欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

shell脚本之for循环语句

时间:2023-07-16

目录

一、for循环语句

1.1.列表循环

(1)格式1

(2)格式2

(3)案例

1.2.不带列表循环

(1)格式

(2)案例

1.3.类C风格的for循环

(1)格式

(2)案例

1.4.for循环案列


一、for循环语句

语法结构

列表循环不带列表循环类c风格的for循欢

1.1.列表循环

(1)格式1

for 变量名 in {list}do commanddone

示例:

①:

②:

 ③:

 ④:

 (2)格式2

for 变量名 in a b cdo commanddone

示例:

①:

 ②:

 (3)案例

①:打印1-5这5个数字。

[root@server ~]# vim for.sh#!/bin/bashfor i in {1..5}do     echo $idone

②:打印5次hello world。
注意:虽然我们定义了一个变量i,但是没有使用它,它只是控制循环次数。

[root@server ~]# vim for.sh#!/bin/bashfor i in {1..5}do echo hello worlddone

③:打印abcde。

[root@server ~]# vim for.sh#!/bin/bashfor i in a b c d edo echo $idone

④:输出0-50之间的偶数。

[root@server ~]# vim for1.sh#!/bin/bashfor i in {0..50..2} //..2代表步长为2,每隔2个do echo $idone

⑤:花括号{}和seq在for循环的应用:

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的偶数,中间为步长

1.2.不带列表循环

(1)格式

for 变量名 do commanddone

(2)案例

打印hello

第一种:

[root@server ~]# vim for2.sh 

#!/bin/bash
for i
do
        echo hello
done

[root@server ~]# 、for2.sh      //没有给脚本传参所以执行了没有结果
[root@server ~]# 、for2.sh a   //把a赋值给变量i,i有值了它就开始执行do..done了
hello

第二种:

#!/bin/bash
for i
do
        echo $i
done
[root@client ~]# bash for.sh hello
hello

1.3.类C风格的for循环 (1)格式

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

(2)案例

①:打印1-5

[root@server ~]# vim for3.sh#!/bin/bashfor ((i=1;i<=5;i++))do echo $idone注:i++ : i=1+1 先赋值再运算 i=1 之后 再 +1 ++i : 1+1=i 先运算再赋值 1+1 之后 再=i

②:打印1-10的奇数

[root@server ~]# vim for3.sh#!/bin/bashfor ((i=1;i<=10;i+=2)) do echo $idone附:类C风格运算符用法++自身变量+1-- 自身变量-1+=5自身变量+5-=5自身变量-5*=5自身变量*5/=5自身变量/5%=5自身变量%5

③:计算1-100的奇数和

[root@server ~]# vim for3.sh #!/bin/bashsum=0for ((i=1;i<=100;i+=2))do let sum=$i+$sumdoneecho "1-100的奇数和为:$sum"

1.4.for循环案列

例1、批量添加用户两种方式

(1)以后缀批量变化添加

for i in {1..5}do        useradd stu$i        echo "123" | passwd --stdin stu$idone

(2)脚本批量添加用户

#!/bin/bashULIST=$(cat /root/users.txt) for UNAME in $ULISTdouseradd $UNAMEecho "123456" | passwd --stdin $UNAME &>/dev/null done

批量删除用户的脚本

#!/bin/bashULIST=$(cat /root/users.txt) for UNAME in $ULISTdouserdel -r $UNAME &>/dev/null done

例2、根据 IP 地址列表检查主机状态
-c 发送包的数量;-i 发送 ping 包间隔;-W 超时时间

(1)根据文本查看

#!/bin/bashHLIST=$(cat /root/ipadds.txt)for IP in $HLISTdoping -c 3 -i 0.2 -W 3 $IP &> /dev/nullif [ $? -eq 0 ] then    echo "Host $IP is up."else    echo "Host $IP is down."fi done

(2)根据段查看

network="192.168.10"for addr in {1..254}doping -c 2 -i 0.5 -W 3 $network.$addr &> /dev/null        if [ $? -eq 0 ];then        echo "$network.$addr is up"        else        echo "$network.$addr is down"        fidone

例3、用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警。

#!/bin/bashinit=123456for i in {1、.3}doread -p "请输入密码: "passif [ $pass == $init ] ; thenecho "密码正确"exitfidoneecho "警官:密码错误"

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。