これが私が現在持っているもの(上部bashウィンドウ)と構文が返すもの(下部bashウィンドウ)です。
「xyz」などの名前が存在しない場合は、適切な応答を返します。
「joel」などの名前が存在する場合、正しい応答を提供する前に不要な応答をエコーします。
私は何を見逃していますか?
name=$1
OUTPUT=$(grep -i $name ~uli101/2016c/phonebook)
if [ "$name" = "" ]
then echo -n "Enter a name to search for: "
read name
fi
if [ $? -ne 1 ]
then echo "Name $name not in directory"
fi
grep -i $name ~uli101/2016c/phonebook
~
:~/scripts> phone4 xyz
Name xyz not in directory
:~/scripts> phone4 joel
Name joel not in directory
SHAPRIO JOEL SH 4802 BUSINESS STUDIES DIVISION
:~/scripts>
答え1
スクリプトは名前が見つからないと報告し、名前が存在すると報告します。これはあなたの状態によるものですif [ $? -ne 1 ]
。 「$?」は、スクリプトの最後の式の戻りコードを表します。この場合、以前の「if」ブロックの戻りコードです。
目的の結果を得るには、最初と2番目の「if」ブロックの間で「grep」コマンドを移動します。このように、2番目の「if」はgrepの結果を評価します。 grepが結果を見つけると、その結果を印刷し、戻りコードは0になり、ブロックをスキップします。 grepが結果を見つけられない場合は、何も印刷せず、戻りコードは1になり、実行条件が発生します。
答え2
すべてのバージョンではないgrep~について知っている- キュー 私が使用するいくつかの秘訣は、コマンドの状態にのみ興味があるときにコマンドの前に「nohup」を付けることです。なぜなら私は怠惰で「リダイレクト方法」を忘れてしまったからです。
ノースヘップウェイ
nohup grep -i string_arg file_args >/dev/null
status=$?
リダイレクト方法
grep -i string_arg file_args 2>&1 >/dev/null
status=$?