shell腳本示例(二)
在這個腳本中我將會一步一步的完全手動添加用戶,並不使用useradd和passwd兩個命令,而是直接通過在/etc/passwd,/etc/shadow,/etc/group,幾個文件中添加數據而創建用戶。
通過本示例,你可以完全瞭解linux創建用戶,創建密碼的完整詳細過程,以及各個字段的意義,幫助你理解linux對用戶的管理。腳本有點長,如果你能專心的讀完比理解肯定會有一點收穫的!
首先我先說一下腳本的流程:
1. 輸入一個用戶名,判斷是否存在
2. 輸入密碼通過openssl生成密碼
3. 判斷其他是否採取默認,如果非默認,則執行一下步驟
4. 輸入UID,並判斷
5. 同理GID
6. 讓用戶輸入想要創建的家目錄,如果存在,告訴用戶,是否創建新的目錄。
7. 通過查詢/etc/shells讓用戶輸入希望選取的shell
8. 輸入備註
9. 創建用戶,
10. 修改用戶的家目錄權限,及屬主屬組
#!/bin/bash
#option this script will enable you to add a user!
#USERNAME
CONDITION=y
while [ $CONDITION == 'y' ];do
#實現添加多個用戶
read -p "Input username: " TUSERNAME
#確定用戶名時,必須確定名字唯一,注意這裏並沒有判斷名字的格式
grep "^$TUSERNAME:" /etc/passwd > /dev/null
RESULT1=`echo $?`
while [ $RESULT1 -eq 0 ];do
read -p "The user is exist!,Please input is again: " TUSERNAME
grep "^$TUSERNAME:" /etc/passwd > /dev/null
RESULT1=`echo $?`
done
echo "$TUSERNAME is your username! "
#END OF USERNAME
#CREATE PASSWD
read -p "Passwd: " TPASSWD
while [ $TPASSWD -lt 100 ];do
read -p "Passwd must longer than three character! " TPASSWD
done
SALT=`head -1 /dev/urandom | md5sum | cut -d' ' -f1 | sed 's@\(.\{8\}\).*@\1@g'`
#此爲選取八位隨機數,作爲生成密碼的雜質
FPASSWD=`openssl passwd -1 -salt $SALT $TPASSWD`
#這是生成密碼的過程,注意密碼的格式
CURR=`date '+%s'`
CURRENTTIME=`expr $CURR / 86400`
echo "$TUSERNAME:$FPASSWD:$CURRENTTIME:0:99999:7:::" >> /etc/shadow
#注意/etc/shadow中每一行的格式
#END OF CREATE PASSWD
read -p "Would like to set others as default(y/n)? " RESULT6
if [ $RESULT6 == 'y' ];then
UGID=500
cut -d: -f3 /etc/passwd | grep "^$UGID$" > /dev/null
RESULT5=`echo $?`
while [ $RESULT5 -eq 0 ];do
let UGID+=1
cut -d: -f3 /etc/passwd | grep "^$UGID$" > /dev/null
RESULT5=`echo $?`
done
echo "$TUSERNAME:x:$UGID:$UGID::/home/$TUSERNAME:/bin/bash" >> /etc/passwd
#這裏我採取了讓UID和GID相同的方法,也是默認用passwd的結果
TDIR="/home/$TUSERNAME"
mkdir "$TDIR" > /dev/null
rsync /etc/skel/.* $TDIR > /dev/null
#創建一個新用戶家目錄中的文件來源於/etc/skel/中
cut -d: -f3 /etc/passwd | grep "^$TGID$" > /dev/null
RESULT7=`echo $?`
if [ $RESULT7 -eq 1 ];then
echo "$TUSERNAME:x:$UGID:" >> /etc/group
TGROUPNAME=$TUSERNAME
else
TGROUPNAME=`cut -d: -f1,3 /etc/group | grep "^$TGID$" | cut -d: -f1 `
fi
else
#UID
read -p "Input uid(between 500 and 65535): " TUID
#輸入的UID必須在500和65535之間,但必須不能存在
cut -d: -f3 /etc/passwd | grep "^$TUID$" > /dev/null
RESULT2=`echo $?`
if [ $TUID -lt 500 ];then
RESULT2=0
fi
if [ $TUID -gt 65535 ];then
RESULT2=0
fi
while [ $RESULT2 -eq 0 ]
do
read -p "The uid is exist in the /etc/passwd(or notin 500~65535),please input another uid: " TUID
cut -d: -f3 /etc/passwd | grep "^$TUID$" > /dev/null
RESULT2=`echo $?`
if [ $TUID -lt 500 ];then
RESULT2=0
fi
if [ $TUID -gt 65535 ];then
RESULT2=0
fi
done
echo $TUID
#END OF UID
#create group
#用戶輸入的GID必須在500~65535之間,如果GID存在則告訴用戶組的名字,否則直接創建
read -p "and the gid: " TGID
while [ $TGID -lt 500 ] || [ $TGID -gt 65535 ]
do
read -p "Please input another gid(between 500 and 65535): " TGID
done
cut -d: -f3 /etc/passwd | grep "^$TGID$" > /dev/null
RESULT3=`echo $?`
if [ $RESULT3 -eq 1 ];then
echo "$TGID is a new group ID! and groupname is : $TUSERNAME"
echo "$TUSERNAME:x:$TGID:" >> /etc/group
TGROUPNAME=$TUSERNAME
else
TGROUPNAME=`cut -d: -f1,3 /etc/group | grep "^$TGID$" | cut -d: -f1 `
echo "$TGID is exist in group,and group name is $TGROUPNAME . "
fi
#END OF GROUP
#輸入家目錄,存在的話告訴用戶,並確認是否重新創建,同時並同步默認的幾個文件
# the follow is the home of user's DIR
read -p "Which dir you want to as a home dir: " TDIR
if [ -e $TDIR ];then
read -p "the $TDIT is exist,would like to make a new dir?(y/n) " RESULT4
if [ $RESULT4 == 'Y' ] || [ $RESULT4 == 'y' ];then
read -p "Input the new dir: " TDIR
mkdir "$TDIR" >> /dev/null
fi
else
mkdir "$TDIR"
fi
rsync /etc/skel/.* $TDIR > /dev/null
#同步文件
#EDN OF CREATE DIR
#CREATE SHELL
read -p "The shell?`cat /etc/shells` " TSHELL
#END OF SHELL
#用戶輸入的shell必須可用,這裏我沒有判斷,你可以添加幾行代碼,判斷輸入的shell是否可用
#creat user
read -p "you can write any commentary: " $TCOM
echo $TUSERNAME $TUID $TGID $TDIR $TSHELL $TPASSWD
echo "$TUSERNAME:x:$TUID:$TGID:$TCOM:$TDIR:$TSHELL" >> /etc/passwd
#手動添加用戶的最重要的步驟!
echo
# useradd -u "558" -g "503" -d "$TDIR" -s "$TSHELL" $TUSERNAME
#
#end of creat user
fi
#更改用戶的屬主屬組
chown $TUSERNAME:$TGROUPNAME $TDIR
chmod 700 $TDIR
echo "add user successfuly! "
read -p "if you like to continue input y others to quit: " CONDITION
done
腳本源代碼在附件中,對應本腳的名字是useraddfial1,同時還有幾個很簡單的腳本供大家參考!謝謝支持!