shell 循环语句

1、 shell中的循环语句

循环语句,主要是为了简化重复动作代码,在运维方面主要用于重复某项动作,例如批量创建用户,在shell中主要有两种 while循环 与 for 循环。

1、while循环

while 循环主要用于无限次的循环情况,例如登录认证,你不知道多少次可以登录成功,当然可以认为限制登录次数。

1.1、while循环 的结构
#!/bin/bash
while true
do
	echo "哈哈哈哈哈哈哈哈哈"  #循环体
done
1.2、 while循环脚本示例

1)、while循环从文件读取用户,增加用户,并且设置密码。

1、创建用户文件
[root@localhost ~]# cat >123.txt<<-EOF
love1
love2
love3
love4
love5
EOF

2、while 脚本
#!/bin/bash
rm -rf info.txt &>/dev/null
while read user
do
	id $user &>/dev/null
	if [ $? -ne 0 ];then
		useradd $user &>/dev/null
		pwd=`mkpasswd -l 10`
		echo $pwd | passwd --stdin $user &>/dev/null
		echo "$user:$pwd"|tee -a info.txt
		echo " 用户 $user 添加成功..."
	else
	echo "$user 已经存在..."
	fi
done<123.txt

2)批量添加指定前缀,数量的用户

#!/bin/bash
read -p "请输入用户前缀,密码,数量:" pre pass num
if [[ ! $num =~ ^[0-9]+ ]];then
	ehco "请输入数字"
fi
cat <<EOF
	你输入的用户名前缀为:$pre
	你设立的密码为:$pass
	你设定用户个数为:$num
EOF
while true
do
read -p "你确定要创建?" ch
case $ch in
	y|yes)
		for i in `seq $num`;do
			id $pre$i &>/dev/null
			if [  $? -ne 0 ];then
				useradd $pre$i
				echo "用户 $pre$i 创建成功..."
				echo $pass|passwd --stdin $pre$i &>/dev/null
			else
				continue
				echo "用户 $pre$i 已经存在..."
			fi
		done
		break
		;;
	n|no)
		exit 1
		;;
	*)
		echo "错误输入,请重新输入..."
esac
done

3)、批量删除用户

#!/bin/bash
read -p "请输入用户前缀,数量:" pre num
cat <<EOF
	你输入的用户名前缀为:$pre
	你设定用户个数为:$num
EOF
while true
do
read -p "你确定要删除?" ch
case $ch in
	y|yes)
		for i in `seq $num`;do
			id $pre$i &>/dev/null
			if [  $? -eq 0 ];then
				userdel -r  $pre$i
				echo "用户 $pre$i 删除成功..."
			else
				continue
				echo "用户 $pre$i 不存在..."
			fi
		done
		break
		;;
	n|no)
		exit 1
		;;
	*)
		echo "错误输入,请重新输入..."
esac
done
2、for 循环

for 循环主要用于有限次数循环,例如测试一个网段内地ip是否通达,又或者我们要循环迭代一个文件的内容,我们可以for循环来完成工作

2.1 for 循环结构
for i in `seq 5` #可循环迭代的对象,例如一个打开的文件,{1..100}等
    do
	echo "haha $i"  #循环体,for循环从中依次取值
    done

2.2 for循环脚本

1)检测子网段内ip的通达性

#!/bin/bash
for i in {1..200}
do
    {
    ip=100.100.100.$i
    ping -c1 -w1 $ip
    if [ $? -eq 0 ];then
        echo "$ip"|tee -a ip.txt
   fi
}&
done
wait
cat ip.txt

2)批量修改子网段ssh登陆密码

#!/bin/bash
for i in {10..200}
do
{
    ip=100.100.100.$i
    ping -c1 -w1 $ip &>/dev/null
    if [ $? -eq 0 ];then
        ssh $ip "echo 123456 |passwd --stdin root" &>/dev/null
        echo "$ip"|tee -a ch_ip.txt
    else
        echo "$ip"|tee -a er_ip.txt
    fi
}&
done

3)、批量添加用户

#!/bin/bash
read -p "请输入用户前缀,密码,数量:" pre pass num
if [[ ! $num =~ ^[0-9]+ ]];then
	ehco "请输入数字"
fi
cat <<EOF
	你输入的用户名前缀为:$pre
	你设立的密码为:$pass
	你设定用户个数为:$num
EOF
while true
do
read -p "你确定要创建?" ch
case $ch in
	y|yes)
		for i in `seq $num`;do
			id $pre$i &>/dev/null
			if [  $? -ne 0 ];then
				useradd $pre$i
				echo "用户 $pre$i 创建成功..."
				echo $pass|passwd --stdin $pre$i &>/dev/null
			else
				continue
				echo "用户 $pre$i 已经存在..."
			fi
		done
		break
		;;
	n|no)
		exit 1
		;;
	*)
		echo "错误输入,请重新输入..."
esac
done

2、循环中用到的一些其他shell命令

1、break 结束循环
2、exit 退出整个脚本 
3、continue 忽略本次循环剩余的代码,直接进⾏下一次循环

相关文章

系ubuntu 下面打开终端输入:sudo apt-get install sendmail...
依家我有1个软件goagent目录(大家懂得) 放在/home/gateman/...
其实我想讲的是 cp -L关于-L参数的解释:-L, --dereferenc...
原地址:http://www.rjgc.net/control/content/content.php?...
chroot,即 change root directory (更改 root 目录)。在 li...
简单解析下, stdin就是标准输入, stdout就是标准。举个例子...