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
转载于:https://blog.51cto.com/ggvylf/1606397