このスクリプトの一部として、指定された最初の引数がファイルの最初の単語と一致するかどうかを確認できる必要があります。含まれている場合は、エラーメッセージを表示して終了します。そうでない場合は、ファイルに引数を追加します。 if
の書き方を理解しています ステートメントですが、grep
の使用方法ではありません スクリプト内。 grep
であることを理解しています このようになります
grep ^$1 schemas.txt
これは私が作っているよりもずっと簡単なはずだと思います。
if
で「引数が多すぎます」というエラーが表示されます 声明。 grep -q
の間のスペースを削除しました その後、予期されるエラー二項演算子を取得しました。
if [ grep -q ^$1 schemas.txt ]
then
echo "Schema already exists. Please try again"
exit 1
else
echo "[email protected]" >> schemas.txt
fi
承認された回答:
grep
何かが見つかった場合(ゼロ)と何も見つからなかった場合(ゼロ以外)は、異なる終了コードを返します。 if
ステートメントでは、ゼロの終了コードは「true」にマップされ、ゼロ以外の終了コードはfalseにマップされます。さらに、grepには-q
があります 一致したテキストを出力しない(ただし、終了ステータスコードのみを返す)引数
したがって、次のようにgrepを使用できます:
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
簡単に言うと、if [ -z "$var" ]…
のようなことをするとき 、[
grepと同じように、実際には実行しているコマンドです。私のシステムでは、/usr/bin/[
。 (技術的には、シェルにはおそらく組み込みがありますが、これは最適化です。コマンドのように動作します)。同じように機能します、[
trueの場合はゼロの終了コードを返し、falseの場合はゼロ以外の終了コードを返します。 (test
[
と同じものです 、終了]
を除く )