Regular Member
加入日期: Jan 2021
文章: 85
|
用shell寫一個script來建帳戶
大家好,學校作業要求製作一個建user帳號的shell script,東拼西湊的,我寫得很心虛,希望大家幫我看看如何改進,謝謝
(建組名,建帳戶名,設密碼,提供改user id 與 group id的機會) #!/bin/bash if [ `whoami` = root ]; then echo "Please provide a group name:" else echo "Permission denied." fi read g groupadd $g echo "Group name '$g' has been created successfully." echo "Please provide a user name:" read u useradd $u echo "User account '$u' has been created successfully." read -p "Please enter the password for '$u' : " PASSWD echo "$PASSWD" | passwd --stdin $u &> /dev/null echo "Do you want to change group ID for '$g' (y/n)?" read gyn echo if [ $gyn == y ] then echo "Please enter the group ID for '$g':" read gid groupmod $g -g $gid echo echo "The group ID $gid is with the group '$g' now." elif [ $gyn == n ] then echo "Ok, nothing to change" fi echo "Do you want to change user ID for '$u' (y/n)?" read uyn echo if [ $uyn == y ] then echo "Please enter the user ID for '$u':" read uid usermod $u -u $uid echo echo "The user ID $uid is with the user '$u' now." elif [ $uyn == n ] then echo "Ok, nothing to change" fi |
|||||||
2021-09-18, 11:03 PM
#1
|
Major Member
加入日期: Sep 2001 您的住址: Keelung
文章: 132
|
可以考慮使用crack-lib 先檢查一下密碼不能設定太簡單
|
||
2021-09-19, 04:26 PM
#2
|
Regular Member
加入日期: Jan 2021
文章: 85
|
引用:
好的謝謝,這個作業讓我覺得寫東西真的不容易,要能夠用,真的還差太遠。 |
|
2021-09-19, 05:05 PM
#3
|
Senior Member
加入日期: Jul 2001 您的住址: 好久沒有看見橡皮艇在窗邊划的二樓...
文章: 1,246
|
檢查有沒有重復ID!
|
2021-09-19, 10:13 PM
#4
|
Regular Member
加入日期: Jan 2021
文章: 85
|
引用:
我要先謝謝你20年的資深帳戶! 我試過建 '第二個peter',如果我記得沒錯,系統是回應peter已經存在,所以我就沒寫這個步驟。請問這樣正常嗎? 此文章於 2021-09-20 08:18 AM 被 ansible 編輯. |
|
2021-09-20, 08:17 AM
#5
|
Power Member
加入日期: Jan 2002 您的住址: Taipei
文章: 659
|
可以參考 Debian 系列裡頭的 /usr/sbin/adduser 指令.
這是一個 perl script, 跟你要做的類似, 最後去執行真的 useradd 指令來新增使用者.
__________________
Tommy 碎碎念... |
2021-09-20, 10:41 AM
#6
|
Regular Member
加入日期: Jan 2021
文章: 85
|
引用:
好我再試試看! |
|
2021-09-20, 01:47 PM
#7
|
Regular Member
加入日期: Jul 2014
文章: 89
|
請善用function,這樣可以大幅減少程式碼,也好讀
還有~~有些時候善用return code可以讓工作更簡單 ex: 假設你系統有一個帳號叫做ansible,然後你又新增了ansible這個帳號 只要單純的檢查return code,就可以確認帳號有沒有建好 一些檢查工作就讓系統自己去處理即可 如果要做到更靈活應用,那麼getopt是一個不可或缺的功能 function範例 function get_input() { local q=$1 local v=$2 local answer="" read -p "${q}" -e -i ${v} answer [[ ${#answer} -eq 0 ]] && answer=$v echo $answer } gyn=$(get_input "Do you want to change user ID for ${u} (y/n)?" "y") 如果你if裡面要包的東西很少,可以考慮一行式判斷 [[ $gyn == n ]] && echo "Ok, nothing to change" PASSWD=$(get_input "Please enter the password for ${u}" $PASSWD) |
2021-09-23, 12:53 AM
#8
|
Regular Member
加入日期: Jan 2021
文章: 85
|
引用:
好強大! 請問哪本書可以學到這些專業技巧? 我買了一本酆士昌的「Linux Shell程式設計實力養成:225個實務關鍵技巧徹底詳解(附DVD)(第二版)」好像沒有您提到的內容? 感謝! |
|
2021-09-28, 01:37 PM
#9
|
Regular Member
加入日期: Jul 2014
文章: 89
|
引用:
你想問哪一塊? shell script基本上google一下一堆阿,我個人沒啥買書的 除了基本的case, do, while, if這些知道怎樣用 awk, sed, wc, sort, grep會組合(regular expression可以的話看一下) 加上function/array用法,應該就差不多了吧? 頂多有人會遇到IFS要特別處理問題 至於return code這個就真的是基礎到不行的東西 程式間交換狀態一般都是靠他 有些時候shell script寫太長,就會把每個function放到library來引用 舉例: lib.sh 裡面塞前面給你的function範例 main.sh source PATH/lib.sh gyn=$(get_input "Do you want to change user ID for ${u} (y/n)?" "y") 這樣你main裡面就會出現大量"人"讀得懂的邏輯,看起來也會清爽很多 |
|
2021-09-28, 11:49 PM
#10
|