Help us understand the problem. What is going on with this article?

シェルコマンド1行で複数コマンドや条件に応じた実行をする

More than 5 years have passed since last update.

crontabやansibleを使ってると、条件に応じたコマンドや複数コマンドの実行を一行に記述したい場合が案外多い.

スクリプトファイルを用意して実行すれば言われそうだが、たかが数行のためにファイルにおこすの面倒だし、なんせファイルの管理をしなければならない.

そんな時に1行で済む便利なシェルコマンドの書式をまとめておきます.

※ 以下の例は別のコマンドやオプションを使えば本来1コマンドで済みますが、説明の便宜上少し回りくどいコマンドにしています.

コマンド1 || コマンド2

コマンド1が異常終了ならコマンド2を実行

$> ls hello.txt || echo "Hello!" > hello.txt

hello.txtが存在しなければ、文字列"Hello!"をhello.txtに出力して生成.

コマンド1 && コマンド2

コマンド1が正常終了ならコマンド2を実行

$> ls hello.txt && rm -f hello.txt

hello.txtが存在したら、hello.txtを削除.

"[ 条件式 ]"の利用

以下のように、シェルスクリプトのif文で用いる "[ 条件式 ]" を利用した書き方も可能です.

$> [ -f hello.txt ] || echo "Hello!" > hello.txt
$> [ -f hello.txt ] && rm -f hello.txt

[ -f hello.txt ] は "hello.txtがファイルである"->真. ファイルでない/存在しない->偽.
条件式の書式はシェルスクリプト入門サイトなどに詳細な説明があるので割愛します.

コマンド1; コマンド2

コマンド1を終了したら、結果に関わらずコマンド2を実行

$> ls hello.txt; cp hello.txt yeah.txt

hello.txtの有無を確認し、その結果に関わらずhello.txtのコピーをyeah.txtとして生成する
hello.txtがない場合、それにも関わらずコピーしようとするので後者cpコマンドはエラー.

コマンド1 | コマンド2

言わずと知れたパイプ処理. コマンド1の出力をコマンド2の入力として実行.

$> ps aux | grep ntpd

プロセス一覧リストを出力して、そのうち"ntpd"が含まれる行を出力.

wwwaltz
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした