16.循环执行
将代码段重复运行多次
重复运行多少次;
循环次数事先已知
循环次数事先未知
有进入条件和退出条件
for,while,until
for循环
for 变量名 in 列表;do
循环体
done
执行机制:
依次将列表中的元素赋值给“变量名”;每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束
列表生成方式:
1.直接给出列表
2.整数列表:
(a){1..10}
(b) $(seq 1 10)
3.返回列表的命令
$(command)
4.使用glob,如*.sh
5.变量引用:$@,$*
案例练习:
1、判断/var/目录下所有文件的类型#!/bin/bash
#
a=`echo /var/ | sed -r 's@(.*)/@\1@'`
for b in `ls -A /var/`
do
c=`ls -dl $a/$b | cut -c1`
case $c in
f)
echo "$b iWJ"
;;
d)
echo "$b ML"
;;
*)
echo "$b NO ZD"
esac
done
2、添加10个用户user1-user10,密码同用户名#!/bin/bash
#
u=user1
for i in {1..10};do
if id -u $u$i &>/dev/null;then
echo "$u$i CZ"
else
useradd $u$i &> /dev/null
echo "$u$i useradd success!!"
echo $u$i |passwd --stdin $u$i &> /dev/null
echo "$u$i passwd success!!"
fi
done
3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的 文件;分别读取每个文件,以K开头的文件输出为文件加stop ,以S开头的文件输出为文件名加start; “K34filename stop” “S66filename start”#!/bin/bash
#
file=`ls -A /etc/rc.d/rc3.d/`
for i in $file ;do
s=`echo $i | cut -c1`
case $s in
K)
echo "$i stop"
;;
S)
echo "$i start"
;;
esac
done
4、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的 总和#!/bin/bash
#
read -p "SRSZ:" n
#m=`echo "$n" | grep -E "^[[:digit:]]+"`
if [ $n -eq 0 ];then
echo "zheshi 0"
fi
for i in `seq $n`
do
sum=$(($sum+$i))
done
echo `seq -s + 1 $n`=$sum
5、写一个脚本,提示请输入网络地址,如192.168.0.0,判 断输入的网段中主机在线状态#!/bin/bash
#
read -p "shuru IP:" ip
num=`echo $ip |sed -r 's@(.*).$@\1@'`
if `echo $ip |egrep '\' &>/dev/null`
then
for i in `seq 113 116`
do
ping -c1 -W2 $num$i &>/dev/null && echo "$num$i success!" || echo "$num$i error"
done
else
echo "$ip bibi"
fi
6、打印九九乘法表#!/bin/bash
#
for i in `seq 9`
do
for b in `seq 1 $i`
do
echo -ne "$b*$i=$(($b*$i))\t"
done
echo
done
echo = = = = = = = = = = = = = = 2 = = = = = = = = = = = = =
for ((i=1; i<=9; i++))
do
for ((j=1; j<=i; j+