ShellのTipsてきなやつ
ShellスクリプトのTipsです。
シェル変数の初期化をする
変数に値が設定されていない場合は、指定された値を返します。
1 | : ${VAR:=初期化する値} |
パラメーターを取得する
$@
にパラメーターが格納されています。
例えば以下の記述をした for.sh ファイルを作成します。
1 | for role in "$@"; do |
以下のように出力されます。
1 | $ ./for.sh hoge moge |
評価結果を変数に格納する
"$()"
で囲めば、評価結果を変数に格納することができます。
1 | $ name="$(hostname)" |
if と test コマンドの合わせ技
ifとtestコマンドを使う場合はtestコマンドを省略した[]
がよく使われます。
[ 文字列1 = 文字列2 ]
[ 数値1 オプション 数値2 ]
[ オプション 評価対象 ]
[ の直後と ] の直前には必ず半角スペースが必要です (無いと正常に動作しません)。
ちなみに比較は ==
でなくて =
です。
シェルの比較は文字列の比較と数値の比較があり、それぞれに対応するオペレーターがあります。
そのせいで複雑になっている印象があります。
数値の比較
数値1と数値2が等しいかどうか
-eq
、もしくは =
を使います。
1 | $ [ 1 -eq 1 ]; echo $? |
数値1と数値2が等しくないかどうか
-ne
を使います。
1 | $ [ 1 -ne 2 ]; echo $? |
!=
でも動作しますが、慣習的にあまり使わないようです。
文字列の比較
文字列1と文字列2が等しいかどうか
同じ場合にtrueを返す=
と その否定である !=
を使います。
1 | $ [ "hey" = "hey" ]; echo $? |
ちなみに数値の比較に使う -eq
で比較したところエラーとなりました。
1 | $ [ "hey" -eq "hey" ]; echo $? |
文字列1と文字列2が等しくないかどうか
文字列比較のNOT条件!=
を使用します。
1 | [ "$hoge" != "fuga" ] |
数値比較のNOT条件
数値の比較の場合は -ne
オプションを使うのが慣習のようです。
1 | [ 1 -ne 2 ] |
変数が空かどうか
1 | [ -z "$hoge" ] |
空でないかを判定する場合は -n
を使います。
1 | [ -n "$hoge" ] |
findで抽出したファイルをreadコマンドで1行ずつ処理する
1 | find application -type f -name "*.ini" | while read LINE; do wc -l ${LINE}; done; |
実行ファイルのあるパスを取得する
1 | echo "$(cd $(dirname $0);pwd)" |
1つ上のディレクトリは以下のように取得する
1 | echo "$(cd $(dirname $0);cd ..;pwd)" |