これらのコマンドをより直接的に読み取ることができる方法は何ですか?
なぜexit 255
ダメなのexit 1
?
[ $# -eq 3 ] || { echo error ; exit 255 ; }
grep -q "string" && exit 0
答え1
他の人はこれがコマンドライン引数の数であると述べた$#
ので、あなたの質問でその部分を無視します。
与えられたcmd1 && cmd2
、シェルが最初に実行されますcmd1
。失敗すると、cmd1
式全体が失敗します。成功すると、cmd1
シェルは引き続き実行されますcmd2
。次の場合、式全体が成功します。両方 cmd1
成功しcmd2
ました。したがって、この&&
演算子はシェルコマンドに適用される段落ブールANDです。この演算子の使用は次のように置き換えることができます。
if cmd1
then
cmd2
fi
与えられたcmd1 || cmd2
、シェルが最初に実行されますcmd1
。成功すると、式全体が成功します。それ以外の場合は、シェルが実行され、cmd2
式の成功または失敗が決定されますcmd2
。つまり、これはシェルコマンドに適用される段落ブールORです。このフォームを次のように置き換えることができます。
if ! cmd1
then
cmd2
fi
私はこのフレーズを慎重に使用します成功/成功そして失敗/失敗する以上。シェルコマンドの場合、成功はプロセス終了状態 0 として定義されます。失敗はゼロ以外の状態です。しかし、終了状態でAND演算子を理解しようとすると、&&
少なくとも私にとっては混乱します。なぜなら、奇妙な種類の逆論理で終わるからです。||
答え2
実際にはとても簡単です。
スクリプトは正確に3つのパラメータがあることを確認します。これがまさにこの[ $# -eq 3 ]
部分です。そうでない場合、その{ echo error ; exit 255 ; }
部分が実行されます。終了コード255は特別な意味を持っています。これは「終了状態が範囲外」を意味します。バラよりここで。ここでは少し誤用があると思いますが、可能です。
答え3
$#~であるパラメータ数シェルに。したがって、最初の行には「3つの引数がない場合は終了」と表示されます。なぜなら右側(in||) は左部分が真でない場合にのみ実行されます。||論理的または。
255を戻りコードとして任意に指定できます。
スクリプトが返されます。0、入力に「文字列」という単語が含まれている場合。
これは役に立ちますか?
答え4
入力に「文字列」が含まれている場合は、コマンドを含む行でこれを行い、grep
そうexit 0
でなければ終了コードは1になります。より明確なアプローチは次のとおりです。
grep -q "string"
if [ $? -eq 0 ]
then
exit 0
else
exit 1
fi