在编程语言中少不了使用逻辑结构去进行操作繁杂的操作,这样解决了繁琐的步骤,容易让别人读懂。
在linux中有常用的三种循环循环:for,while,until
基本规则:
循环体:要执行的代码;可能要执行n遍;
进入条件;
退出条件;
1、for循环的格式
for循环:
for 变量名 in 列表;do
循环体
done
执行机制:依次将列表中的元素赋值给“变量名”;每一次赋值都执行一次循环体;直到列表中的元素耗尽,循环结束。
示例:添加10个用户,user1-user10,密码同用户名
#!/bin/bash
#
if [ !$UID -eq 0 ];then
echo "only admin can create username."
exit 1
else
for i in {1..10};do
if id user$1 &>/dev/null;do
echo "The username has done."
else
useradd user$i
echo "user$i" |passwd --stdin user$i &>/dev/null
echo "Add user$1 finished."
done
fi
2、在for循环中列表的生成方式
(1)直接给出字符串列表
(2)整数列表
(a){start..end}
(b)$(seq[start[step]end])
(c)返回列表的命令 $(command)
(d)glob
(e)变量引用
$@ $*
示例:判读某路径下所有文件类型
#!/bin/bash
#
for file in $(ls /var);do
if [ -f /var/$file ];then
echo "common file"
elif [ -d /var/$file ];then
echo "directory"
elif [ -L /var/$file ];then
echo "symbloic file"
else
echo "other file"
fi
在for循环中先后次序至关重要。 例如上面的示例先判断目录和先判断链接文件显示的结果时截然不同的。
示例:判断状态
#!/bin/bash
#
declare estab=0
declare listen=0
declare other=0
for state in $(netstat -tan |grep 'tcp'|awk '{print $NF}');do
if [ "$stat"=="ESTABLEHED" ];then
let estab++
elif [ "$stat"=="LISTEN" ];then
let listen++
else
let other++
fi
done
echo "ESTABLISHED:$estab"
echo "LISTEN:$listen"
echo "OTHER:$other"
练习1:/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件:
分别读取每一个文件,而后输出;K开头 ,“输出文件名 stop” ;S开头的输出“文件名 start”
>
#
for filename in $(ls /etc/rc.d/rc3.d);do
if [ "$filename"=~"K*" ];then
echo "$filename stop"
elif [ "$filename"=~"S*" ];then
echo "$filename start"
else
echo "oter type"
fi
done
练习二:写一个脚本,使用ping命令探测172.16.250.1-254之间的主机的在线状态。
#
read -p "Enter enternet number,For example 172.16.0: " IPnumber
for num in {1..254};do
if ping -c 1 -w 1 $IPnumber.$num >/dev/null ;then
echo "The state is active"
else
echo "The state isn't active"
fi
done