next up previous contents
Next: 範例二 Up: 範例 Previous: 範例   Contents

範例一

  1. 寫一腳本 /root/mkusers.sh 從一用戶名稱列表的檔案讀取用戶名稱,在 kvm5.deyu.wang 產生此用戶名稱之帳號,同時滿足下列要求:
    1. 腳本必須提供一個外部參數輸入,用來指定用戶名稱列表的檔案名稱。
    2. 如果直接執行此腳本,而沒有提供參數,此腳本將提示訊息:Usage: /root/mkusers.sh <userfile> ,還後退出並回傳一適當的值。
    3. 如果指定一不存在的用戶名稱檔,此腳本將提示訊息:Input file not found ,還後退出並回傳一適當的值。
    4. 用戶建立的登入 shell 為 /bin/false。
    5. 此腳本不需要為產生的帳號設定密碼。
    6. 可以下載 http://dywang.csie.cyut.edu.tw/materials/ulist.txt 用戶名稱列表檔進行測試。
    7. 測試產生的帳號刪不刪除都可以。
  2. 編輯腳本
    [root@kvm5 ~]# vim /root/mkusers.sh
    
  3. 第一種寫法。
    [root@kvm5 ~]# vim /root/mkusers.sh
    [root@kvm5 ~]# cat /root/mkusers.sh 
    #!/bin/bash
    [ -z "$1" ] && echo "Usage: /root/mkusers.sh <userfile>" && exit 1
    ! test -f "$1" && echo "Input file not found" && exit 2
    while read line; do
    	useradd -s /bin/false $line
    done < $1
    exit 0
    
  4. 第二種寫法。
    [root@kvm5 ~]# vim /root/mkusers.sh
    [root@kvm5 ~]# cat /root/mkusers.sh
    #!/bin/bash
    if [ -z "$1" ]; then
    	echo "Usage: /root/mkusers.sh <userfile>"
    	exit 1
    elif ! test -f "$1"; then
    	echo "Input file not found"
    	exit 2
    else
    	while read line; do
    		useradd -s /bin/false $line
    	done < $1
    fi
    exit 0
    
  5. 第三種寫法。
    [root@kvm5 ~]# vim /root/mkusers.sh
    [root@kvm5 ~]# cat /root/mkusers.sh
    #!/bin/bash
    if [ -z "$1" ]; then
    	echo "Usage: /root/mkusers.sh <userfile>"
    	exit 1
    elif ! test -f "$1"; then
    	echo "Input file not found"
    	exit 2
    else
    	for line in $(cat $1); do
    		useradd -s /bin/false $line
    	done
    fi
    exit 0
    
  6. 變更腳本屬性為所有人都可執行。
    [root@kvm5 ~]# chmod a+x /root/mkusers.sh
    
  7. 執行腳本,不提供參數,顯示訊息如要求,且回傳值為 1,不能是 0。
    [root@kvm5 ~]# /root/mkusers.sh 
    Usage: /root/mkusers.sh <userfile>
    [root@kvm5 ~]# echo $?
    1
    
  8. 執行腳本,提供的參數檔案不存在,顯示訊息如要求,且回傳值為 2,不能是 0。
    [root@kvm5 ~]# /root/mkusers.sh abc123
    Input file not found
    [root@kvm5 ~]# echo $?
    2
    
  9. 下載用戶名稱列表測試檔 ulist.txt。
    [root@kvm5 ~]# wget http://dywang.csie.cyut.edu.tw/materials/ulist.txt
    
  10. 執行腳本,提供測試檔 ulist.txt,正常執行回傳值為 0。
    [root@kvm5 ~]# /root/mkusers.sh ulist.txt
    [root@kvm5 ~]# echo $?
    0
    
  11. 查看用戶名稱列表測試檔 ulist.txt 內的用戶名稱。
    [root@kvm5 ~]# cat ulist.txt
    david
    linda
    peter
    rita
    
  12. 以 getent passwd 查看系統是否有依用戶名稱列表測試檔 ulist.txt,產生帳號且其登入 shell 為 /bin/false。
    [root@kvm5 ~]# for u in $(cat ulist.txt); do getent passwd $u; done
    david:x:1003:1003::/home/david:/bin/false
    linda:x:1004:1004::/home/linda:/bin/false
    peter:x:1005:1005::/home/peter:/bin/false
    rita:x:1006:1006::/home/rita:/bin/false
    



2017-11-30