よく使うシェルスクリプト基本構文とサンプル

シェルスクリプト書くときだいたいいつも必要になるけど、たまにしか書かないので忘れがちなやつをメモ。随時更新予定。
なお、全てMac OS X/bin/shを想定している。

絶対パスを得る

fullpath=$(cd $(dirname $0) && pwd)

$0はシェルスクリプト自身を表すので、シェルスクリプトファイルの相対パスが得られる。
そのディレクトリでpwdすると、絶対パスが得られる。
$0のかわりに相対パスを与えると、そのファイルの絶対パスが得られる。
なお、括弧の中でcdしているが、その後の処理には影響しない。

配列

配列を作成
arr=(a b c)
echo ${arr[0]}  # => a

${配列変数名[index]}と、"{}"で囲む必要あり
インデックスはshでは0始まりだが、bashzshだと違うみたい?なので注意

配列の要素数を得る
$#arr   # => 3
${#arr} # => 3
配列に要素を追加
arr=(1 2 3)
arr=(${arr[*]} 4)
echo ${arr[*]}      # => 1 2 3 4

なお、上記では、変数$arrが存在しない場合、4という1つの要素をもつ配列になる。

分岐(よく使うパターン)

  • パス存在チェック
if [ -e $path ]; then
    (パスが存在する場合実行される)
fi
  • ファイル存在チェック
if [ -f $file ]; then
    (パスが存在し、かつファイルである場合実行される)
fi
if [ -d $dir ]; then
    (パスが存在し、かつディレクトリである場合実行される)
fi
  • 複数ファイルの存在チェック
if [ "$(ls $dir | grep '.html$')" != '' ]; then
    (拡張子がhtmlのファイルが存在する場合実行される)
fi

[ -e *.html ] などとすると、複数存在する場合は [ コマンドのエラーになり、存在しない場合はシェルのグラブ展開エラーになるため、上記のようにした。(他にもっといい方法があるかも)

終了ステータス

  • 正常時
exit 0
  • 異常時
exit 1