よく使うシェルスクリプト基本構文とサンプル
シェルスクリプト書くときだいたいいつも必要になるけど、たまにしか書かないので忘れがちなやつをメモ。随時更新予定。
なお、全て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始まりだが、bashやzshだと違うみたい?なので注意
配列の要素数を得る
$#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