RHCE腳本題目詳解
題目一
在system1上創建一個名為 /root/foo.sh 的腳本,讓其提供下列特性:
當運行 /root/foo.sh redhat
,輸出為 fedora
當運行 /root/foo.sh fedora
,輸出為 redhat
當沒有任何參數或者參數不是 redhat 或者 fedora 時,其錯誤輸出產生以下的信息:
/root/foo.sh redhat | fedora
shell腳本之if語句實現:
#/bin/bash
if [ "$1" == "redhat" ]
then
echo "fedora"
elif [ "$1" == "fedora" ]
then
echo "redhat"
else
echo "/root/foo.sh redhat | fedora"
fi
shell腳本之case語句實現:
#!/bin/bash
case $1 in
redhat)
echo "fedora"
;;
fedora)
echo "redhat"
;;
*)
echo "/root/foo.sh redhat|fedora"
;;
esac
題目二
在 system1 上創建一個腳本,名為 /root/batchusers ,此腳本能實現為系統 system1 創建本地用戶,並且這些用戶的用戶名來自一個包含用戶名列表的文件,同時滿足下列要求:
此腳本要求提供一個參數,此參數就是包含用戶名列表的的文件
如果沒有提供參數,此腳本應該給出下面的提示信息 Usage: /root/batchusers userfile 然后退出並返回相應的值
如果提供一個不存在的文件名,此腳本應該給出下面的提示信息 Input file not found 然后退出並返回相應的值
創建的用戶登錄shell為 /bin/false
此腳本不需要為用戶設置密碼
您可以從下面的URL獲取用戶名列表作為測試用 http://server.group8.example.com/pub/userlist
實現
#!/bin/bash
if [ $# -eq 0 ] ; then
echo "Usage: /root/batchusers userfile"
exit 1
fi
if [ ! -f $1 ] ; then
echo "Input file not found"
exit 2
fi
for name in $(cat $1)
do
useradd -s /bin/false $name
done
測試
由於shell的強大,此題亦有多種解法,此處提供一個批量刪除用戶user*的腳本,用於自行編寫腳本測試
#!/bin/bash
#此處即為刪除的user user1-user8
for i in {1..8}
do
userdel -r user$i
done
解析
腳本第一題讀懂沒什么難度 熟悉shell編程 中 if語句 和case語句基本格式即可
唯一一個迷惑人的參數$1
放到下面第二題一並解釋
建議使用簡單的if語句實現
#指定/bin/bash執行該腳本
#!/bin/bash
# $#代表傳入的參數個數 -eq代表等於 此處為0 即代表不傳入任何參數
if [ $# -eq 0 ] ; then
# 返回錯誤語句"Usage: /root/batchusers userfile"
echo "Usage: /root/batchusers userfile"
#退出 返回相應的值
exit 1
# shell中if語句的結構所需
fi
# !非 -f 后跟文件名 用於判斷是否存在文件
if [ ! -f $1 ] ; then
echo "Input file not found"
exit 2
fi
#使用for語句結合cat命令循環將傳入文件(即變量$1所代表)中每一行字符串取出 並存入name變量里
for name in $(cat $1)
do
#添加用戶 用戶名為name變量的值 並設置-s /bin/false參數
useradd -s /bin/false $name
done
寫在后面
編輯shell腳本推薦使用vim編輯器
注意if語句格式 每個參數和 '[' 或 ']'之間需要一個空格
務必理解腳本含義 不要死記腳本 畢竟題目中給定的測試字符串以及錯誤輸出可能會變動
腳本編寫完畢需要給予x
執行權限chmod 755 filename
或者 chmod a+x filename
That is all ! Have a nice rhce time!