スクリプトが不要な出力を返します。

スクリプトが不要な出力を返します。

これが私が現在持っているもの(上部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=$?

関連情報