シェルスクリプト
ルーチン化しそうな作業は、シェルスクリプトとして記述しながら実行していくと、後々楽だと今更気付いた。あんまり関係ないけど、zsh で複数行にまたがるコマンドを実行した後、一部だけ編集して再実行したいなという時に、1行目だけじゃなくて、複数行の編集ができるので便利。
以下、シェルスクリプト関連のメモ。
特殊変数
- $# : 引数の個数
if 条件式
- [ A -lt B ] : A < B ならば真
- [ -d $dir ] : ディレクトリ $dir が存在するか
子プロセスの終了を待つ
ビルトインコマンドの wait を使う。
最初は ps -fe | grep process | grep -v grep | wc -l が 0 になったらみたいな事をやっていたけど、単純すぎて、ソースコード開いてるだけでも処理が止まったのが面白い(危ない)。
getopts
コマンドライン引数のパーサ。getopts の引数に a:b と渡していることのは、「 a はオプション値が必要で、b は必要でない」という意味。コロンを付与することでオプション値が必要だと教える。オプション値があってもなくてもいいときは :: と書く。オプション値は $OPTARG に保存されている。
下記の例では、指定されたオプションが OPT に渡されて、case 文で処理をする。getopts の引数で指定した以外のオプションを渡すと "*" が OPT に渡され、パースエラーが生じると "?" が渡される。
while getopts a:b OPT do case $OPT in "a" ) $VAR_A=$OPTARG ;; "b" ) $FLG_B="TRUE" ;; "*" ) exit 1 ;; "?" ) exit 1 ;; esac done
ファイルのディレクトリ名
dirname コマンドで獲得する。ファイル名が欲しい時は basename コマンドを使う。
DIR=`dirname $0`