2017-02-09 5 views
-1

私はLinuxを初めて使っています。正確には6週間。とにかく、私はどこに行くのかわからない譲渡に取り組んでいます。コマンドラインでLinuxのスクリプトと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'タグwiki](/ tags/bash/info)も参照してください。 – tripleee

+0

私はこのような質問のために2日間探しました。私は自分の検索が正しい質問をしていないと思う。あなたが検索するときに得られるすべての結果を絞り込む最良の方法を教えてください。あなたが話しているトピックを示す見出し/タイトル?私はshellcheck.netとbashタグwikiを見て、それを見つけたいと考えています。あなたの助けに感謝! –

+1

@ F.Garvin - 私は "bash if else statement"を検索し、この結果を得ました: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は不要です
    • 最初の行:通常は間隔が!後に使用されていない(バグではないが)
  • +0

    'grep'を変数に取り込み、空の文字列と比較できるようにすることは反パターンです。 'もしgrep '^ henry'/etc/passwd && grep '^ henry'/etc/groups; then ... 'は一致するものを表示し、その終了コードをフロー制御のために '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