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