回答:
からgrep --help
、しかしman grepも参照してください:
いずれかの行が選択された場合の終了ステータスは0、それ以外の場合は1です。エラーが発生して-qが指定されなかった場合、終了ステータスは2です。
if grep --quiet MYSQL_ROLE=master /etc/aws/hosts.conf; then
echo exists
else
echo not found
fi
^MYSQL_ROLE=master$
コメントなどの文字列や、単に「master」で始まる名前などを避けるために、などのより具体的な正規表現を使用することができます。
これは、ifがコマンドを受け取って実行し、そのコマンドの戻り値を使用して続行方法を決定するために機能します。ゼロはtrueを意味し、非ゼロはfalseを意味します。他の戻りコードがシェルによって解釈される方法と同じです。 Cのような言語の反対
if
コマンドを受け取り、その戻り値をチェックします。[
単なるコマンドです。
if grep -q ...
then
....
else
....
fi
PIPE
コマンドまたはコマンドのシーケンスとして、次のことに注意してください。
if PIPE ; then
# do one thing if PIPE returned with zero status ($?=0)
else
# do another thing if PIPE returned with non-zero status ($?!=0), e.g. error
fi
記録のために、[ expr ]
組み込みのシェルである†の省略形test expr
。
grep
一致する場合はステータス0で戻り、一致しない場合はゼロ以外のステータスで戻るため、以下を使用できます。
if grep -lq '^MYSQL_ROLE=master' ; then
# do one thing
else
# do another thing
fi
-l
少なくとも1つの一致があるファイルのみを対象とする使用法に注意してください(これによりgrep
、不必要に入力ファイルを解析し続けることなく、一致が見つかるとすぐに戻ります)。
† 一部のプラットフォーム上で[ expr ]
組み込み、実際の実行可能ではありません/bin/[
(その最後の引数になります]
理由です)、[ expr ]
角括弧の周りに空白が含まれている必要があり、それが続かなければなりませんなぜコマンドリストの区切りの1(;
、&&
、||
、|
、&
、改行)
-l
は冗長であり、grep
一致するものが見つかるとすぐに戻ります-q
ただbashを使う
while read -r line
do
case "$line" in
*MYSQL_ROLE=master*)
echo "do your stuff";;
*) echo "doesn't exist";;
esac
done <"/etc/aws/hosts.conf"