つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

shell scriptのif文まとめ!

   

こんにちは、@s_tsukaです。

今回はshell scriptのif文のまとめです。この記事を読めば一発で書きたいifを書けるようにすることを目的とします。

経緯

みなさんは普段shell scriptを書いていますか?自分は月に数回程度書いています。便利にするためのscriptだったり、プロダクトコードとしてのscriptだったり、JenkinsのビルドJobやバッチJobのscriptだったり。

そんなとき、高確率でif文を書きますが、いつもifの書き方を忘れてしまいます。C, Java, Scalaなどはちゃんと覚えているのですが、shell scriptはどうしても覚えられなくて・・・そんなわけでまとめていきます。

でもまとめと言えど、すでにまとめてくれているサイトは山ほどあるわけで・・・特にココとかはよくまとまっています。

if 文と test コマンド

なので、本当に必要な部分だけまとめていこうと思います。

実際に使う文や機能

以下淡々と載せていきます。シェバン(#!/bin/bashは省略します)

[[

たまに見かける(一部の人はよく使う)bashキーワードである[[です。基本的にはこれを使います。変数展開による事故を防止できるためです。ちなみに[[ですが、日本語名とかわかりませんよね。自分は「かっこかっこ」とか呼んでますが・・・

どうやら英語でも正式名称は無いようですが「double brackets」と呼ばれているようです。

文字列一致

普通に=使えば良いだけ。

[[を使っておけば変数展開の事故を防げるので、

こんなのも正しく動きます(変数aaaは定義なし)

数値一致

こちらも普通に=を使えば良いだけ。

これは一見数値の比較に見えますが、$val = “1”でも一致するので、その点は注意・・・だけど実際書いてるとそれほど型は意識しないので、大丈夫かな?

一致しない(否定)

上記では 「a = b」というように書いていますが、もちろん「a != b」と書けばOKです。

数値の大小比較

ここは少し曲者ですね。-geで「以上」になります。>=は使えません。

geとleで混乱する人は「geは A(左辺)は、B(右辺)より大きいまたはイコール(greater than or equal to)」とストレートに覚えておくと良いと思います。geとgt両方あって分からない・・・という人はe = equalと覚えましょう。

本当は>=というワードが使えれば良いのですけども。

少し飛ばしましたが、

ge : 以上

gt : より大きい

le : 以下

lt : より小さい

ですが、gt, ltについては>, <というおなじみの不等号が使えますので覚えなくても大丈夫です。

ファイルの存在チェック

existのeで覚えておけば良いと思います。

文字列の長さ(長さ0か1以上か)

nかzです。これは少々覚えづらいですね。non zero lengthのn、zero lengthのzで覚えると良いかと思います。

ファイルサイズが0より大きいか、あるいは0か

-sを使えばOKです。sizeのsです。

AND, OR, NOT

-aや-oは覚える必要はありません。プログラマならばよくある表記通り&&, ||, !で覚えておけば良いです。

細かいオプションを忘れたとき

この記事をあらためて見返しても良いですし、Google検索しても良いですし、man testコマンドを打って説明を読んでも良いと思います。

まとめ

shell scriptのifで重要なポイントだけを説明しました。

みなさんのShell scriptコーディングが少しでも捗れば幸いです。

 - ShellScript , ,