2016-11-15 14 views
0

這更關注於學習BASH而不是創建特定的代碼。在Bash中提高知識

---問題:編寫一個Bash腳本,它將計算機系統上的登錄名列表作爲命令行參數,並顯示擁有這些登錄名的用戶的這些登錄名,全名和用戶ID包含在/ etc/passwd文件中),每行一個。如果登錄名無效(在/ etc/passwd文件中找不到),請顯示登錄名和相應的錯誤消息。 ---

如果我需要創建一個代碼來滿足我能做到這一點使用這樣的「選擇」名單這個問題:

read -p "Enter choice: " ch 
     if [ "$ch" = "1" ]; then 
     function_1 
     else 
     if [ "$ch" = "2" ]; then 
     function_2 
     else 
     if [ "$ch" = "3" ]; then 
     function_3 
     else 
     if [ "$ch" = "4" ]; then 
     function_4 
     else 
     if [ "$ch" = "5" ]; then 
     function_5 
fi x5 

或那就要使用grep和測試完成方法,其中由用戶讀取輸入必須納入變量Name1 Name2 .... NameN並通過grep命令測試到ect/passwd文件。

#!/bin/bash 
# pgroup -- first version 
# Fetch the GID from /etc/group 
gid=$(grep "$̂1:" /etc/group | cut -d: -f3) 
# Search users with that GID in /etc/passwd 
grep "^[^:]*:[^:]*:[^:]*:$gid:" /etc/passwd | cut -d: -f1`enter code here` 

請用一些通用的代碼來解釋最好的。我仍在學習基礎知識並測試不同的想法。我很抱歉,如果這些是非常模糊的概念,我仍然得到BASH的掛鉤。

回答

0

您可以:

  1. 接受(讀取)與用戶名,如果通過檢索使用grep記錄存在

  2. 檢查用戶名的用戶,

  3. 如果陽性結果(即你有數據),根據需要顯示它,

  4. 否則,顯示錯誤信息(或wh你需要的)。

你幾乎在那裏(得到如何獲得輸入,如何使用grep進行搜索)。你需要的是將grep的結果放入一個你可以檢查的變量中。您可以嘗試類似:

Result=$(grep....) 

然後檢查Result的內容。

+0

好的,所以檢查輸入到 - >變量名稱1(這相當於grep測試用戶輸入)但是我怎樣才能設置變量爲用戶ID前手, 我只是做一個變量,但我可能需要很多用戶ID ?如果我最終需要檢查30個用戶,我需要30個變量嗎? – Rep

+0

您的'read'命令將用戶列表分配給變量'ch'。然後,您可以使用[this](http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash)示例瞭解如何拆分字符串和循環返回值。 – FDavidov

+0

一個補充:如果用戶列表在引號中提供,它將作爲單個參數接收,因此您需要將其拆分。如果不使用引號字符,則可以使用示例[here](http://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-bash-script)進行循環。 – FDavidov

0

對我來說,它看起來像你錯過了這個問題的一個重要組成部分:

./script.sh name1 name2 name3 

如果是這種情況,那麼循環將是最:名作爲參數傳遞給腳本合適的做法使用方法:

for login; do 
    printf '%s: %s\n' "$login" "$(grep "^$login" /etc/passwd)" 
done 

請注意,在默認情況下,傳遞給腳本[email protected]參數列表中for循環迭代。