循环
1. for循环
1.1 语法结构
for variables in {list}
do
command
command
done
或者
for varianles in a b c
do
command
command
done
举例
for var in {1..10};do echo $var;done
for var in $(seq 10);do echo $var;done
for var in 1 2 3 ;do echo $var;done
for var in $(seq 10);do echo $var;done
1.2 不带列表循环
由用户指定参数和 参数的个数
for variables
do
command
done
举例
#!/bin/bash
for var
do
echo $var
done
echo "脚本后边有$#个参数"
1.3 类似于C语言的循环
for((expr1;expr2;expr3))
do
command
done
for((i=1;i<5;i++))
do
command
done
1.4 举例
1.4.1 计算1到100之间奇数的和
#!/bin/bash
sum=0
for i in {1..100..2}
do
sum=$[ $sum + $i ]
或者
let sum=sum+i
或者
let sum=$sum+$i
done
echo "和为i:$sum"
for((i=1;i<100;i+=2))
do
let sum+i
done
2. 循环体的控制
do done之间的内容
continue | 跳出本次循环,执行下一次 |
---|---|
break | 结束循环,执行循环体外边的内容 |
exit | 直接跳出 |
案例:
#!/bin/bash
for i in {1..5}
do
[ $i -eq 2 ] && break || echo "iwei$i"
done
echo "hahah"
2.1 输入一个正整数,判断是否为质数
#!/bin/bash
read -p "请输入一个正整数:" ZS
if [ $ZS -eq 1 ];then
echo "$ZS不是质数" && exit
elif [ $ZS -eq 2 ];then
echo "$ZS 是质数" && exit
fi
for((i=2;i<ZS;i++))
do
if [ $[$ZS%$i] -eq 0 ];then
echo "$ZS 不是质数"
exit
fi
done
echo "$ZS是质数"
for i in `seq 2 $[$ZS-1]`
2.2 批量加5个新用户,以u1到u5命名,并统一加一个新组,组名为class,统一改密码为123
#!/bin/bash
#批量加5个新用户,以u1到u5命名,并统一加一个新组,组名为class,统一改密码为123
grep -w class /etc/group
[ $? -ne 0 ] && groupadd class
for i in {1..5}
do
useradd u$i -G class
echo 123 |passwd --stdin u$i
done
2.3 批量新建5个用户stu1~stu5,要求这几个用户的家目录都在/rhome.提示:需要判断该目录是否存在
#!/bin/bash
#判断/rhome是否存在
[ -f /rhome ] && mv /rhome /rhome.bak
test ! -f /rhome -a ! -d /rhome && mkdir /rhome
或者
[ -f /rhome ] && mv /rhome /rhome.bak || [ ! -d /rhome ] && mkdir /rhome
#创建用户,循环5次
for ((i=1;i<=5;i++))
do
useradd -d /rhome/stu$i stu$i
echo 123|passwd --stdin stu$i
done
2.4 写一个脚本,局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里,这是一个局域网内机器检查通讯的一个思路。
#!/bin/bash
ip=192.168.80
for i in {40..50}
do
ping -c1 $ip.$i &>/dev/null
if [ $? -eq 0 ];then
echo "$ip.$i id ok" >> /tmp/ping.txt
else
echo "$ip.$i is no" >> /tmp/noping.txt
fi
done
并行执行:
{程序}&表示将程序放到后台并行执行,如果需要等待程序执行完毕再进行下面内容,需要加wait
#!/bin/bash
ip=192.168.80
for i in {40..50}
do
{
ping -c1 $ip.$i &>/dev/null
if [ $? -eq 0 ];then
echo "$ip.$i id ok" >> /tmp/ping.txt
else
echo "$ip.$i is no" >> /tmp/noping.txt
fi
}&
done
wait
echo "ip is ok"
2.5 输入一个年份,判断是否是润年
#!/bin/bash
read -p "请输入一个年份:" year
if [ $[$year%4] -eq 0 -a $[$year%100] -ne 0 ];then
echo "$year 是闰年"
elif [ $[$year%400] -eq 0 ];then
echo "$year 是润年"
else
echo "$year不是闰年"
fi