[解決済み] if not true条件」を作るには?
質問
が欲しいのですが
echo
コマンドを実行したとき
cat /etc/passwd | grep "sysa"
が真でない場合。
私は何を間違えているのでしょうか?
if ! [ $(cat /etc/passwd | grep "sysa") ]; then
echo "ERROR - The user sysa could not be looked up"
exit 2
fi
解決方法は?
試す
if ! grep -q sysa /etc/passwd ; then
grep
リターン
true
は、検索対象が見つかれば
false
となります。
だからNOT
false
==
true
.
if
シェルの評価は非常に柔軟に設計されており、多くの場合、(あなたが書いたような)コマンドの連鎖を必要としません。
また、あなたのコードをそのまま見てみると、あなたの使っている
$( ... )
のようなcmd-substitutionの形式は賞賛に値しますが、そのプロセスから何が出てくるかを考えてみてください。試しに
echo $(cat /etc/passwd | grep "sysa")
をクリックすると、私の言いたいことがわかります。それをさらに進めるために
-c
(カウント) オプションを grep に指定して、次のようにします。
if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
というのは、うまくいくのですが、どちらかというと古いやり方です。
しかし、最新のシェル機能(算術評価)を使えば、次のようになります。
if ! (( $(grep -c "sysa" /etc/passwd) == 0 )) ; then ...`
で、c-lang ベースの比較演算子を使うメリットもあります。
==,<,>,>=,<=,%
その他にもいくつかあるかもしれません。
この場合、Orwellophileのコメントにより、算術評価はさらに以下のように簡略化できます。
if ! (( $(grep -c "sysa" /etc/passwd) )) ; then ....
または
if (( ! $(grep -c "sysa" /etc/passwd) )) ; then ....
最後に
賞
と呼ばれる
Useless Use of Cat (UUOC)
. :-) 飛び上がってゴスロリ!と叫ぶ人もいるでしょう。ということにしておきます。
grep
はcmd-lineでファイル名を受け取れるので、余計なプロセスやパイプ構造を呼び出す必要はないでしょう?)
お役に立てれば幸いです。
関連
-
[解決済み] (standard_in) 1: bash スクリプトのシンタックスエラー
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashで変数で定義された数値の範囲を反復処理するにはどうすればよいですか?
-
[解決済み】Bashスクリプトに渡された引数の数を確認する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ambiguous redirect」エラーが発生する
-
[解決済み】ZIPエラー - 何もできない
-
[解決済み] 部分的にコピーされたファイルでscpを再開する方法は?[クローズド]です。
-
[解決済み] Docker ubuntu イメージ - bash: man: コマンドが見つかりません。
-
[解決済み] zip警告 - 名前が一致しない
-
[解決済み] eval "$(docker-machine env default) "とする。
-
[解決済み] docker alpine /bin/sh script.sh not found
-
[解決済み] ConcatenationとAppendの違いについて【終了しました
-
[解決済み] findコマンドと一緒に使用するとエラー 'rm: missing operand' が発生する。
-
[解決済み] 絶対パスと論理パスの違い