一、字符串運算符
二、創建賬戶
1.提示用戶輸入用戶名和密碼,腳本自動創建相應的賬戶及配置密碼。如果用戶不輸入賬戶名,則提示必須輸入賬戶名並退出腳本;如果用戶不輸入密碼,則統一使用默認的 123456 作為默認密碼。
read命令參考網址:https://www.cnblogs.com/xiangzi888/archive/2012/03/27/2420084.html
[root@VM_0_10_centos shellScript]# vi autoCreateUser.sh #!/bin/bash # 編寫腳本:提示用戶輸入用戶名和密碼,腳本自動創建相應的賬戶及配置密碼。如果用戶 # 不輸入賬戶名,則提示必須輸入賬戶名並退出腳本;如果用戶不輸入密碼,則統一使用默 # 認的 123456 作為默認密碼。 read -p "Please input a username:" username # -z 判斷一個變量是否為空。如果為空,提示用戶必須輸入賬戶名並退出腳本,退出碼為2 # 沒有輸入賬戶名,退出后使用$?查看返回碼為2 if [ -z $username ]; then echo "您需要輸入賬戶名" exit 2 fi # 使用stty -echo 關閉shell的回顯功能(即在命令行輸入的密碼為不可見) # 使用stty echo 打開shell的回顯功能 stty -echo read -p "Please input a password:" pass stty echo pass=${pass:-123456} useradd "$username" echo "$pass" | passwd --stdin "$username"
運行腳本之前先賦予執行的權限
chmod a+x 腳本名
2.使用 user.txt 文件中的人員名單,在計算機中自動創建對應的賬戶並配置初始密碼本腳本執行,需要提前准備一個 user.txt 文件,該文件中包含有若干用戶名信息
#!/bin/bash # 使用 user.txt 文件中的賬戶,自動創建對應的賬戶並配置初始密碼 # 本腳本執行,需提前准備一個 user.txt 文件,該文件中包含有若干用戶名信息 for i in `cat user.txt` do useradd $i echo "123456" | passwd ‐‐stdin $i done
三、刪除賬戶
使用命令刪除賬戶(-r 連家目錄一起刪除)
[root@VM_0_10_centos ~]# userdel -r 賬戶名
# ================================== # 刪除賬戶及家目錄 read -p "Please enter an account to delete:" username if [ -z $username ]; then echo "您需要輸入刪除的賬戶名" exit 2 fi userdel -r $username echo "The user delete success!"; # ==================================
四、批量創建賬戶
通過將賬戶和密碼寫入一個txt文件,通過腳本讀取創建文件中設置的賬戶和密碼
txt文件不作解釋,需要注意的一點是賬戶和密碼之間是使用什么作為分隔符,腳本中則需要修改成對應的分隔符
[root@VM_0_10_centos shellScript]# cat createUsers.sh #!/bin/bash # 通過讀取users.txt文件批量添加賬戶 echo $0=$0 echo $1=$1
if [ $# -eq 0 ];then echo "[usage] 請輸入批量創建的賬戶文件:./createUsers.sh users.txt" exit 0 fi # cat命令的輸出作為read命令的輸入,read讀到的值放入line中 cat $1 | while read line do # echo $line(輸出一行信息) # awk -F " " 以空格分隔(如果txt中是:,則以:分隔) username=$(echo $line | awk -F " " '{print $1}') pass=$(echo $line | awk -F " " '{print $2}') useradd $username echo "$pass" | passwd --stdin "$username" done
五、批量刪除賬戶
通過將賬戶和密碼寫入一個txt文件,通過腳本讀取創建文件中設置的賬戶並刪除
[root@VM_0_10_centos shellScript]# cat delUsers.sh #!/bin/bash # 批量刪除 echo $0=$0 echo $1=$1
if [ $# -eq 0 ];then echo "[usage] 請輸入批量創建的賬戶文件:./createUsers.sh users.txt" exit 0 fi # cat命令的輸出作為read命令的輸入,read讀到的值放入line中 cat $1 | while read line do # echo $line # awk -F " " 以空格分隔(如果txt中是:,則以:分隔) username=$(echo $line | awk -F " " '{print $1}') userdel -r $username done
六、讓用戶輸入需要創建的用戶數量和用戶名前綴,使用腳本自動創建
[root@rhel8 shell]# cat input_add_user.sh #!/bin/bash ########################################################################## # useradd # # by author tanbaobao 2020/06/16 # ##########################################################################
# 從鍵盤輸入
read -p "Please Input Number: " NUM # 單個[]不支持正則表達式 ^[0-9]+$只匹配數字 ^0+$只匹配0 +表示一個或多個
if [[ ! "$NUM" =~ ^[0-9]+$ || "$NUM" =~ ^0+$ ]];then echo -e "\033[32mError Number.\033[0m"
# exit
read -p "請重新輸入【1-9】之間的數字: " NUM fi read -p "Please Input Prefix: " PREFIX if [ -z "$PREFIX" ];then echo -e "\033[32mError Prefix.\033[0m"
# exit
read -p "請重新輸入一個字符串: " PREFIX fi for i in `seq $NUM` do USER=$PREFIX$i useradd $USER echo "123456" | passwd --stdin $USER &>/dev/null if [ $? -eq 0 ];then echo -e "\033[32m$USER Already Create.\033[0m" fi done
七、在上面腳本基礎上加一個輸入密碼
[root@rhel8 shell]# cat input_user_pre_pass_num.sh #!/bin/bash ########################################################################## # useradd # # by author tanbaobao 2020/06/22 # ##########################################################################
while : do
# 從鍵盤讀取
read -p "Please Enter prefix & password & num: [alice 12345 1]: " PREFIX PASS NUM printf "user infomation: ------------------------------------------ user prefix: $PREFIX user password: $PASS user num: $NUM ------------------------------------------ " read -p "Are You Sure?[y/n]: " ACTION if [ "$ACTION" = "y" -o "$ACTION" = "Y" -o "$ACTION" = "yes" -o "$ACTION" = "YES" ];then break fi done for i in `seq -w $NUM` do USER=$PREFIX$i id $USER &>/dev/null if [ $? -eq 0 ];then echo "user $USER already exists."
else useradd $USER echo "$PASS" | passwd --stdin $USER &>/dev/null if [ $? -eq 0 ];then echo "$USER is created." fi fi done
八、上面腳本的綜合效果
准備好一個用戶和密碼的文件
[root@rhel8 shell]# cat users_pass.txt
aa01 000000 cc02 222222
vv03 adminuser
[root@rhel8 shell]# cat read_txt_create_user.sh #!/bin/bash ########################################################################## # useradd # # by author tanbaobao 2020/06/22 # ##########################################################################
if [ $# -eq 0 ];then
echo "Usage: `basename $0` file.txt|user" exit 1 fi if [ ! -f $1 ];then id $1 &>/dev/null if [ $? -eq 0 ];then echo "user $1 already exists."
else useradd $1 read -p "Please set the user $1 password: " INP_PASS echo "$INP_PASS" | passwd --stdin $1 &>/dev/null if [ $? -eq 0 ];then echo "$1 is created." fi fi else cat $1 | while read line do
# 判斷文件中出現的空行問題(${#line}表示line的長度)
# break表示跳出循環,后面的不會再執行
# continue表示中止本次循環,執行下次循環
if [ ${#line} -eq 0 ];then
continue fi # 這里如果需要考慮分隔符則需要用到-F參數
USER=`echo "$line" |awk -F" " '{print $1}'` PASS=`echo "$line" |awk -F" " '{print $2}'` echo "line: " $line echo "user: " $USER echo "pass: " $PASS id $USER &>/dev/null if [ $? -eq 0 ];then echo "user $USER already exists."
else useradd $USER echo "$PASS" | passwd --stdin $USER &>/dev/null if [ $? -eq 0 ];then echo "$USER is created." fi fi done fi
注意:for循環默認按空格分隔,處理文件一般不用for循環,如果需要用到其他分隔符分隔需要重新定義分隔符
# 內部字段分隔符 # 需要放在for循環之前 # 第一種
IFS=$'\n' # 第二種(直接回車)
IFS=' '