目录
一、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
command
done
for 变量名 in {list}
do
command
done
示例:
①:
②:
③:
④:
(2)格式2
for 变量名 in a b c
do
command
done
示例:
①:
②:
(3)案例
①:打印1-5这5个数字。
[root@server ~]# vim for.sh
#!/bin/bash
for i in {1..5}
do
echo $i
done
②:打印5次hello world。
注意:虽然我们定义了一个变量i,但是没有使用它,它只是控制循环次数。
[root@server ~]# vim for.sh
#!/bin/bash
for i in {1..5}
do
echo hello world
done
③:打印abcde。
[root@server ~]# vim for.sh #!/bin/bash for i in a b c d e do echo $i done
④:输出0-50之间的偶数。
[root@server ~]# vim for1.sh
#!/bin/bash
for i in {0..50..2} //..2代表步长为2,每隔2个
do
echo $i
done
⑤:花括号{}和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
command
done
(2)案例
for 变量名 do command done
(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
command
done
expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出
(2)案例
①:打印1-5
[root@server ~]# vim for3.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
echo $i
done
注:i++ : i=1+1 先赋值再运算 i=1 之后 再 +1
++i : 1+1=i 先运算再赋值 1+1 之后 再=i
②:打印1-10的奇数
[root@server ~]# vim for3.sh
#!/bin/bash
for ((i=1;i<=10;i+=2))
do
echo $i
done
附:类C风格运算符用法
++ 自身变量+1
-- 自身变量-1
+=5 自身变量+5
-=5 自身变量-5
*=5 自身变量*5
/=5 自身变量/5
%=5 自身变量%5
③:计算1-100的奇数和
[root@server ~]# vim for3.sh
#!/bin/bash
sum=0
for ((i=1;i<=100;i+=2))
do
let sum=$i+$sum
done
echo "1-100的奇数和为:$sum"
1.4.for循环案列
例1、批量添加用户两种方式
(1)以后缀批量变化添加
for i in {1..5}
do
useradd stu$i
echo "123" | passwd --stdin stu$i
done
(2)脚本批量添加用户
#!/bin/bash ULIST=$(cat /root/users.txt) for UNAME in $ULIST do useradd $UNAME echo "123456" | passwd --stdin $UNAME &>/dev/null done
批量删除用户的脚本
#!/bin/bash ULIST=$(cat /root/users.txt) for UNAME in $ULIST do userdel -r $UNAME &>/dev/null done
例2、根据 IP 地址列表检查主机状态
-c 发送包的数量;-i 发送 ping 包间隔;-W 超时时间
(1)根据文本查看
#!/bin/bash HLIST=$(cat /root/ipadds.txt) for IP in $HLIST do ping -c 3 -i 0.2 -W 3 $IP &> /dev/null if [ $? -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}
do
ping -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"
fi
done
例3、用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警。
#!/bin/bash
init=123456
for i in {1. .3}
do
read -p "请输入密码: "pass
if [ $pass == $init ] ; then
echo "密码正确"
exit
fi
done
echo "警官:密码错误"


