GNU/Linux >> Linux の 問題 >  >> Linux

Grepはtrue/falseを返すことができますか、それとも代替方法がありますか?

このスクリプトの一部として、指定された最初の引数がファイルの最初の単語と一致するかどうかを確認できる必要があります。含まれている場合は、エラーメッセージを表示して終了します。そうでない場合は、ファイルに引数を追加します。 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 [と同じものです 、終了]を除く )


Linux
  1. 一致を見つけた後、Grepの終了が遅いですか?

  2. Linux –フォルダにファイルがあるかどうかを調べてそれに応じて終了する方法(Ksh)?

  3. Linux に標準の終了ステータス コードはありますか?

  1. C からミリ秒単位の別のスリープ機能はありますか?

  2. netcat と dd が機能しているかどうかを確認するにはどうすればよいですか?

  3. Linux 上の JTS TestBuilder に代わるものはありますか?

  1. Linux の Bash 終了コードとは

  2. ジョイスティック ボタンの押下をキャプチャできるコマンド ライン ユーティリティはありますか?

  3. フォルダーにファイルがあるかどうかを確認し、それに応じて終了する方法 (KSH)