bash を使おう!① : bash について
なぜ「bash」なのか?
試しにターミナルを開き「ls -l $(which sh)」と入力してみて下さい。
以下のように表示されたのではないでしょうか?
そう、既に「sh」コマンドは存在しなく、「bash」の互換モードで動作しているからです。
これはシェルスクリプトに於ても同様で、ワザワザ「sh」を使う理由に乏しいとも言えるからです。- bash は sh や csh の後継なので、既に存在するスクリプトの移行も簡単
bash は sh ( bone shell ) の後継であり、それに ksh や csh の機能を取り込んだモノです。
従って、文法的には sh の後方互換とも言えますので、スクリプトの1行目を次の様に変更すると、殆どの場合で問題なく動作します。
前:#!/bin/sh
後:#!/bin/bsh
- 様々な制御文
bash は if 、case 、select、for 、while 、until などの制御文や、 function による関数宣言も行えるなど、プログラミングに必要な機能は、殆ど有しています。 - 算術式評価
bash は以下のような算術式評価があります。- id++ id–
変数を評価し、その後 increment (加算)/ decrement (減算) する。 - ++id –id
変数を increment (加算) / decrement (減算) してから評価する。 - – +
単項式の負と正 - ! ~
論理的否定とビット単位の否定 - **
指数 (累乗) - * / %
乗算、除算、剰余 - + –
加算と減算 - << >>
左ビットシフトと右ビットシフト - <= >= < >
比較 - == !=
等値と非等値 - &
ビット単位の AND - ^
ビット単位の排他的 OR - |
ビット単位の OR - &&
論理的 AND - ||
論理的 OR - expr?expr:expr
条件付き実行(三項演算子) - = *= /= %= += -= <<= >>= &= ^= |=
代入 - expr1 , expr2
コンマ
- id++ id–
- sh が使える環境では、ほぼ全ての環境でデフォルトでインストールされています。
UNIX、Linux、MacOSX など、殆どの環境で利用可能です。 - sh スクリプトは読み辛い
sh スクリプトは多くの環境で動作するが、非常に古いために読み辛い。(メンテナンスの問題がある)
bash も同様に多くの環境で動作するため、sh に拘る必要性が無い。 - man コマンドで詳しいマニュアルがインストールされている
ターミナルから、「man bash」と入力して下さい。
多くの環境では、日本語化された詳しいマニュアルが参照できるハズです。
以上の理由から、現在では bash に優先して sh を利用する必要性はありません。