2017-02-09 131 views
-1

我對Linux很新。準確的六個星期。無論如何,我正在完成一項任務,我似乎沒有去任何地方。我創建一個腳本輸入時:在命令行Linux腳本和If elif else語句

sh filename.sh "username" 

,它返回或目錄/etc/passwd/etc/group顯示的信息。我做了大量的if/elif/else聲明無濟於事。這是我目前的地方。如果任何人都可以在這裏提供某種程度的指導,那將是最受讚賞的。我只是沒有看到我在這裏出錯。

#! /bin/bash 

VAR1="$(grep bob /etc/passwd && grep bob /etc/group)" 
VAR2="$(grep henry /etc/passwd && grep henry /etc/group)" 

if [$VAR1]; then 
    echo "$VAR1" 
elif [$VAR2]; then 
    echo "$VAR2" 
else 
    echo "The user entered is invalid" 
fi 
exit 0 
+0

嘗試http://shellcheck.net/你問對人幫助之前。另請參閱[Stack Overflow'bash' tag wiki](/ tags/bash/info)#或一組非常常見的問題。 – tripleee

+0

我已經找了兩天這樣的問題。我懷疑我的搜索沒有提出正確的問題。你能告訴我如何最好地縮小搜索時得到的所有結果嗎?或顯示您正在談論的主題的標題/標題?我將看看shellcheck.net和bash標籤wiki,希望能找到它。感謝你的協助!。 –

+1

@ F.Garvin - 我剛剛搜索「bash if else語句」,並得到了這個結果:http://stackoverflow.com/questions/16034749/bash-script-if-elif-else-statement-issues - 結果是正確的。你搜索什麼? – codeforester

回答

2

試試這個:

#!/bin/bash 

VAR1="$(grep bob /etc/passwd && grep bob /etc/group)" 
VAR2="$(grep henry /etc/passwd && grep henry /etc/group)" 

if [ "$VAR1" ]; then 
    echo "$VAR1" 
elif [ "$VAR2" ]; then 
    echo "$VAR2" 
else 
    echo "The user entered is invalid" 
fi 

變化:內部條件語句

  • 內部條件語句引用(支架和論據之間的強制性)

    • 間距(防止分詞)
    • exit 0最後不需要
    • 第一行:一般無間距的!(雖然不是bug)後再使用
  • +0

    將'grep'輸出捕獲到一個變量,以便您可以將它與一個空字符串進行比較是一個反模式。 'if grep'^ henry'/ etc/passwd && grep'^ henry'/ etc/groups;那麼...'會打印任何匹配,並一次性返回其退出代碼到'if'以進行流量控制。 (如果你不想打印匹配,請使用'grep -q'。注意缺少'['並參見https://stackoverflow.com/questions/36371221/bash-if-statement-too-many-arguments如果擋住你的話。) – tripleee

    +0

    當我在條件中添加空間時,它會正確顯示。但是,無論輸入的用戶名是什麼,它都會顯示與VAR1相關的相同輸出。我閱讀了您提供的頁面上的信息並嘗試了這些替代方法,但這並不奏效。讓我看看我是否可以發佈輸出的屏幕截圖。 –

    +0

    @ F.Garvin如果'VAR1'展開爲非空字符串,'[「$ VAR1」]'測試返回'0'(真)。如果你的if塊總是返回相同的東西,那是因爲這個變量永遠不會擴展爲空字符串。 「VAR1」是否包含您期望的內容? – Fred