for循环:

格式1:

for 变量 in 列表; do

循环体

done


格式2:

近似于c语言的风格。

for ((变量初始值;退出条件;修正变量的值));do

循环体

done



生成列表:

整数列表:

{NUM1,NUM2}

seq [NUM1 [STEP]] NUM2 


例如:

1.计算1+...100的值:

#!/bin/bash

declare SUM=0

for I in {1,100} ;do

let SUM=4[$SUM+$I]

done

echo "the sum is $sum"

2.依次向/etc/passwd 中的每个用户问好,并显示对方的shell。并统计一共有多少个用户。

#!/bin/bash

LINES=`wc -l /etc/passwd | cut -d' ' -f1`

for I in `seq 1 $LINES` ;do

echo"hello,`head -n $I|tail -1|cut -d: -f1`"

done


3.写一个脚本:

添加10个用户user1到user10,密码通用户名,但要求只有用户不存在的情况下才能添加。

#!/bin/bash

for I in {1,10};do

if id user$1 &>/dev/null;then

echo "user$I exists."

else

useradd user$I

echo "user$I"|passwd --stdin user$I &> /dev/null

echo "user$I add ok"

fi

done


4.写一个脚本,输入2个参数。输入--add 添加10个用户,输入--del删除10个用户。

#!/bin/bash

if [ $# -t 1 ];then

echo "Usage:adminuser ARG"

exit 7

fi


if [ $1 == '--add']; then

for I in {1,10};do

if id user$1 &>/dev/null;then

echo "user$I exists."

else

useradd user$I

echo "user$I"|passwd --stdin user$I &> /dev/null

echo "user$I add ok"

fi

done

elif [$1 == '--del'];then

for I in {1,10};do

if id user$1 &>/dev/null;then

userdel -r user$I

echo "user$I del ok"

else

echo "no user$I"

fi

done

else

echo "no such ARG"

exit 8

fi


5.接上题:

使用--add user1,user2...添加指定用户

使用--del  删除指定用户。

使用--help显示帮助

指定用的参数,各个用户用逗号隔开。

#!/bin/bash

if [ $1 == '--add' ];then

for I in `echo $2|sed 's/,//g'`;do

if id $1 &>/dev/null; then

echo "$I exists"

else

useradd $I

echo $I|passwd --stdin $I &>/dev/null

echo "add $I"

fi

done

elif [ $1 == '--del' ];then

for I in `echo $2|sed 's/,//g'`;do

if id $1 &>/dev/null; then

userdel $I

echo "del $I"

else

echo "$I not exist"

fi

done

elif [ $1 == '--help'];then

echo "Usage: xxx.sh --add USER1,USER2... --del USER1,USER2 --help"

else

echo "unknow option"

fi



6.计算1+至100的和

#!/bin/bash

declare -i SUM=0

for ((I=1;I<=100;I++))l;do

SUM+=$I

done

echo $SUM


7.写一个脚本,通过ping测试192.168.1.x网段的主机是否在线。用while、until、for实现。

#!/bin/bash

for I in `seq 1 255`;do

if `ping -c 1 -w 1 192.168.1.$I &>/dev/null`;then

echo "192.168.1.$I is ok"

else

echo "192.168.1.$I is lost"

fi

done


for((J=1;J<=255;J++));do

if `ping -c 1 -w 1 192.168.1.$J &>/dev/null`;then

echo "192.168.1.$J is ok"

else

echo "192.168.1.$J is lost"

fi

done


declare -i  P=1

until [ $P == 256 ] ;do 

if `ping -c 1 -w 1 192.168.1.$P &>/dev/null`;then

echo "192.168.1.$P is ok"

else

echo "192.168.1.$P is lost"

fi

((P++))

done


declare -i  P=1

while ![ $P == 256 ] ;do 

if `ping -c 1 -w 1 192.168.1.$P &>/dev/null`;then

echo "192.168.1.$P is ok"

else

echo "192.168.1.$P is lost"

fi

((P++))

done


#seq [OPTION] FIRST INCREMENT LAST 

例如:

#seq 5

1

2

3

4

5

#seq 5 10

5

6

7

8

9

10

#seq 10 2 20

10

12

14

16

18

20