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 忽略本次循環剩余的代碼,直接進⾏下一次循環


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM