shell腳本之for循環的使用方法及示例


1、什么是循環?

​ 程序和人的生活是非常緊密的,在去公司的路上碰見美女?去打招呼?去上班?

2、什么是for循環

​ 一般叫做條件循環

​ 語法示例

語法格式:
for var in filel file2 fiel3
do
echo 123
done

#打印12345
for var in {1..5}
do
echo $var
done

[root@bgx she1l]# cat for-6. sh
#!/bin/bash
IFS=$'\n' #回車為分割符
for i in、cat /etc/hosts ;
do
echo "$i"
done
[root@bgx she11]# cat for-7.sh
#! /bin/bash
IFS=: #冒號做分隔符
list= head -1 /etc/passwd
for i in $list
do
echo $i
done

for循環基本使用示例, C語言風格的for

#語法格式
for ((i=0;i<10;i++))
do
	commmands
done

案例分析:


需求4:獲取系統的所有用戶並輸出。效果如下:
This is 1 user: root
This is 2 user: bin
This is 3 user: daemon
This is 4 user: adm
...............

i=1
for user in $(awk -F ":" '{print $1}' /etc/passwd)
do
	echo This is ${i} $user
	#let i++ 
	i=$[ $i + 1 ]
done

需求5:批量創建100個用戶,比如輸入oldxu則會創建oldxu01-100。
for user in $(seq -w 1 100)
do
	useradd $1$user
	echo "$1$user is ok"
done
-----------------------------------------------------
for user in $(seq -w 1 10)
do
	id $1$user &>/dev/null
	if [ $? -ne 0 ];then
		useradd $1$user
		echo "$1$user is ok"
	else
		#表示結束當前本次的循環,直接開始下一次循環
		continue
	fi
done



需求6:批量創建用戶腳本,需要用戶輸入創建的用戶數量,以及需要用戶輸入創建的前綴。例如:前綴oldxu,個數10,代表創建oldxu1~oldxu10,總共10個用戶。

read -p "請輸入你需要創建的前綴: " qz
read -p "請輸入你需要創建的數量: " hz
read -p "你要創建的用戶是 $qz , 個數是 $hz 你確定要創建嗎? [ y | n ] " : Action
case $Action in
	y|yes|Y)
			for number in $(seq $hz)
			do
				username=$qz$number
				id $username &>/dev/null
				if [ $? -ne 0 ];then
					useradd $username
					echo "$username is ok"			
				else
					#表示結束當前本次的循環,直接開始下一次循環
					continue
				fi
			done
		;;
	n|no|N)
			echo "Bey!"
			exit 
		;;
	*)
		echo "Gdx"
		exit
esac


需求7:批量創建用戶腳本,需要用戶輸入創建的用戶數量(必須是整數),同時還需要用戶輸入前綴(前綴不能為空)。
例如:前綴oldxu,個數10,代表創建oldxu1~oldxu10,總共10個用戶。

[root@manager for]# cat useradd-new.sh 
#!/usr/bin/bash

read -p "請輸入你需要創建的前綴: " qz
if [ -z $qz ];then
	echo "回車做什么  gdx...."
	exit
fi

read -p "請輸入你需要創建的數量: " hz
if [[ ! $hz =~ ^[0-9]+$ ]];then
	echo "讓你輸數字,,,,emm"
	exit
fi
read -p "你要創建的用戶是 $qz , 個數是 $hz 你確定要創建嗎? [ y | n ] "  Action
case $Action in
	y|yes|Y)
		for number in $(seq $hz)
		do
			username=$qz$number
			id $username &>/dev/null
			if [ $? -ne 0 ];then
				useradd $username
				echo "$username is ok"			
			else
				#表示結束當前本次的循環,直接開始下一次循環
				continue
			fi
		done
		;;
	n|no|N)
			echo "Bey!"
			exit 
		;;
	*)
		echo "Gdx"
		exit
esac


需求8:循環批量創建用戶,需要填入用戶的數量、用戶的前綴、用戶的統一密碼(使用read、case、for語句)
[root@manager for]# cat useradd-passwd.sh 
#!/usr/bin/bash

read -p "請輸入你需要創建的前綴: " qz
if [ -z $qz ];then
	echo "回車做什么  gdx...."
	exit
fi

read -p "請輸入你需要創建的數量: " hz
if [[ ! $hz =~ ^[0-9]+$ ]];then
	echo "讓你輸數字,,,,emm"
	exit
fi

read -p "請輸入所有用戶統一的密碼: " pw


read -p "你要創建的用戶是 $qz , 個數是 $hz  密碼是 $pw 你確定要創建嗎? [ y | n ] "  Action
case $Action in
	y|yes|Y)
		for number in $(seq $hz)
		do
			username=$qz$number
			id $username &>/dev/null
			if [ $? -ne 0 ];then
				useradd $username
				echo "$pw" | passwd --stdin $username
				echo "$username $pw is create ok"			
			else
				#表示結束當前本次的循環,直接開始下一次循環
				continue
			fi
		done
		;;
	n|no|N)
			echo "Bey!"
			exit 
		;;
	*)
		echo "Gdx"
		exit
esac

需求9:通過讀入文件中的用戶,進行批量添加用戶(前提user.txt中有用戶)
[root@manager for]# cat user-file.sh 
for user in $(cat user.txt)
do
	useradd $user

done

需求10:通過讀入文件中的用戶與密碼文件,進行批量添加用戶。文件中的格式: user:passwd
for user in $(cat user.txt)
do
	us=$(echo $user|awk -F ":" '{print $1}')
	pw=$(echo $user|awk -F ":" '{print $2}')

	id $us &>/dev/null
	if [ $? -eq 0 ];then
		continue
	else
		useradd $us
		echo "$pw" | passwd --stdin $us &>/dev/null 
		echo "$us is create ok......"
	fi

done

需求11:使用case實現批量刪除用戶。
1.提示用戶輸入需要刪除的用戶以及刪除的個數。
2.如果用戶存在則刪除,如果不存在則提示no such user。
[root@manager for]# cat for5.sh 
#!/bin/bash
#********************************************************************
#Author:               一個shell小白
#QQ:                  2226823216
#Date:                2019-10-31
#FileName:            for4.sh
read -p "請輸入你要創建用戶的前綴:" Action
read -p "請輸入密碼長度:" Nu
for i in {01..10}
do 
	useradd "$Action$i" 
	pw=$(mkpasswd -l $Nu)
	echo "$pw" |passwd --stdin $Action$i
	echo $Action$i : $pw &>>3.txt
	echo  "$Action$i創建成功"
done


免責聲明!

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



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