Shell編程入門(二)

多練習纔會記得牢
這裏的題目來自於(個別刪選)

  1. 如果當前用戶是管理員,則使用yum 安裝 vsftpd,如果不是,則提示您非管理員,不可安裝
  2. 提示用戶輸入用戶名和密碼,腳本自動創建相應的賬戶及配置密碼。如果用戶不輸入賬戶名,則提示必須輸入賬戶名並退出腳本;如果用戶不輸入密碼,則統一使用默認的 admin 作爲默認密碼。
  3. 編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機狀態
  4. 判斷文件或目錄是否存在

答題環節
1.

if [[ $USER == 'root' ]];then
	echo yes
	# yum -y install vsftpd
else
	echo no
	# echo you are not root
fi

判斷當前用戶是否是管理員還可以使用 $UID -eq 0

if [[ $UID -eq 0 ]];then
	echo yes
	# yum -y install vsftpd
else
	echo no
	# echo you are not root
fi

添加用戶的命令 useradd user
在終端中會自動彈出詢問添加密碼
刪除用戶的命令是 userdel user 這個很重要,不能輕易使用。命令只會刪除用戶,並不會刪除給用戶創建的文件(命名空間)需要增加 -r 把附帶的文件一起刪除。-f 強制刪除用戶。當用戶已經登錄的時候,使用-f 可以強制刪除用戶,但是用戶在不退出前,依舊可以使用,處於活動狀態。
使用 id username 可以判斷用戶是否存在。如果想查看有多少用戶,登錄/home目錄,有幾個目錄就有幾個用戶
然而使用useradd user並意味着你就會在/home創建了一個叫做username的目錄,如果手工把目錄創建完,使用-r也不能把手工創建的目錄刪除

#!/bin/sh 

read -p 'input unsername: ' username
if [[ -z $username ]];then
	echo you need input username
exit 2
fi
stty -echo
read -p 'input password: ' password
stty echo
password=${password:-123456}
sudo useradd $user
mkdir /home/${username}
echo $pass | passwd --stdin $username

我最後都沒有運行成功,當輸完密碼後,終端就直接退出了,在home目錄下我也沒有找到對應的用戶目錄,使用id $username也沒有找到用戶。顯然在sudo useradd $user就被中斷了。遍尋網絡都是這種寫法。
我還找到一個人寫的關於循環寫去的腳本

#!/bin/sh
usrname=(username1 username2)
ii=0
maxuser=2
while (($ii < $maxuser))
do
sudo useradd ${usrname[ii]}
mkdir /home/${usrname[ii]}
chown -R ${usrname[ii]} /home/${usrname[ii]}
echo ${usrname[ii]}|passwd ${usrname[ii]} --stdin
ii=$((ii+1))
done
echo "finished!"
exit

然而我依舊是執行不成功。
通過管道修改密碼的注意點
echo $password |passwd --stdin $user
也卻是是通過管道來修改密碼的語句,文章還提供了以下的說法

  1. 設置密碼最好不要使用echo “password” |passwd --stdin user 這條命令,一是不安全,通過history可以看到密碼,二是不確定因素太多,設置密碼容易出錯,具體echo的用法可以上網搜索查看;
  2. 一臺服務器至少應該設置兩個用戶,一個是root,另外一個是擁有root權限的普通用戶(通過配置/etc/sudoers可以實現),這樣就能夠保證一個密碼出錯後還可以通過另外一個用戶登錄服務器重置密碼,;
  3. 通過passwd user 命令更改密碼,密碼中出現的符號不包含其他意義,僅僅是作爲符號本身來使用,這種方法設置密碼更安全。

然而我在命令行中修改我的新建的賬戶密碼 passwd: unrecognized option ‘–stdin’
同樣的方法卻成功了的網站
當我去除 --stdin 這個 參數時
passwd: You may not view or modify password information for tina.
沒權限至少是能修改的嘛

?[[?表示上一個命令執行狀態,[[? -eq 0]] 表示上一個指令執行成功與否

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章