if文を書くほどでもない、ちょっとした条件分岐処理を行う場合、便利な方法があります。
以下のように実行します。
■ホームディレクトリにtmp3フォルダまたはファイルが無ければNot existと出力し、最後にENDと出力するコマンド
test -e ~/tmp3 || echo 'Not exist' ; echo 'END'
上記の「||」は、
直前の実行結果(echo $?の値)が真(0)であれば直後のコマンドは実行しません。
直前の実行結果が偽(非0)であれば直後のコマンドを実行します。
「;」は、直後のコマンドを(条件関係無く)連続して実行します。
これを利用することで、if文を使わなくとも、条件分岐を行うことができます。
シェルなどのスクリプトだけでは無く、コマンドラインでも使えるので、汎用性が高いです。
ちなみに、上記コマンド例のtestコマンドの実行結果を否定させることで、
「tmp3ディレクトリがあれば、実行する」とすることも可能です。
■ホームディレクトリにtmp3フォルダまたはファイルがあればExistと出力し、最後にENDと出力するコマンド
test ! -e ~/tmp3 || echo 'Exist' ; echo 'END'
また、「||」を複数使うことで、複数の条件をつけることも可能です。
■ホームディレクトリにtmp2、tmp3の両方が無ければNot existと出力、どちらかがあれば何も出力せず、最後にENDと出力するコマンド
test -e ~/tmp2 || test -e ~/tmp3 || echo 'Not exist' ; echo 'END'
要は、論理演算のorなんですよね。前のコマンドから順番に評価し、実行結果が真になったら、以降の評価はせずに、次のコマンドへ進む。
これらの構文を利用して、スクリプトを簡潔に記載したり、コマンドライン操作を効率化しましょう!
(ちなみに私はこの構文を忘れることが多いので、備忘録も兼ねて記事にさせていただきました。)
ただし、スクリプトで多用しすぎると、可読性が低くなることがありますので、
複雑な条件分岐で使うのは避けた方が良いでしょう。その場合は素直にif文を使った方が良いですね。
以下のように実行します。
■ホームディレクトリにtmp3フォルダまたはファイルが無ければNot existと出力し、最後にENDと出力するコマンド
test -e ~/tmp3 || echo 'Not exist' ; echo 'END'
上記の「||」は、
直前の実行結果(echo $?の値)が真(0)であれば直後のコマンドは実行しません。
直前の実行結果が偽(非0)であれば直後のコマンドを実行します。
「;」は、直後のコマンドを(条件関係無く)連続して実行します。
これを利用することで、if文を使わなくとも、条件分岐を行うことができます。
シェルなどのスクリプトだけでは無く、コマンドラインでも使えるので、汎用性が高いです。
ちなみに、上記コマンド例のtestコマンドの実行結果を否定させることで、
「tmp3ディレクトリがあれば、実行する」とすることも可能です。
■ホームディレクトリにtmp3フォルダまたはファイルがあればExistと出力し、最後にENDと出力するコマンド
test ! -e ~/tmp3 || echo 'Exist' ; echo 'END'
また、「||」を複数使うことで、複数の条件をつけることも可能です。
■ホームディレクトリにtmp2、tmp3の両方が無ければNot existと出力、どちらかがあれば何も出力せず、最後にENDと出力するコマンド
test -e ~/tmp2 || test -e ~/tmp3 || echo 'Not exist' ; echo 'END'
要は、論理演算のorなんですよね。前のコマンドから順番に評価し、実行結果が真になったら、以降の評価はせずに、次のコマンドへ進む。
これらの構文を利用して、スクリプトを簡潔に記載したり、コマンドライン操作を効率化しましょう!
(ちなみに私はこの構文を忘れることが多いので、備忘録も兼ねて記事にさせていただきました。)
ただし、スクリプトで多用しすぎると、可読性が低くなることがありますので、
複雑な条件分岐で使うのは避けた方が良いでしょう。その場合は素直にif文を使った方が良いですね。
参考書籍:Linuxコマンドポケットリファレンス
この記事が参考になりましたら、他の方へもシェアしていただけると嬉しいです。
スポンサードリンク
コメント