目录
一、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 "警官:密码错误"