-とかく忘れがちなシェルプログラミングの文法などのまとめ #contents -bashとかは便利だけど常に入っているとは限らない。どこでも使えるshで組むのが基本 *注意事項 [#v5834160] スペースの有無でエラーになったりするので注意 たとえばif文は -これはOK if [ $# -ne 2 ]; then -]の前にスペースがなく、これだけでNG if [ $# -ne 2]; then *引数の処理 [#j2ee8047] **引数を取得 [#qa0fe686] 引数は順番に$1,$2,$3・・・・と取得できる -一つ目の引数を表示 echo $1 **コマンド引数チェック [#na889800] -引数のNULLチェック # nullだったら実施するパターン if [ ! $1 ]; then echo "PLEASE INPUT ARGUMENTS!" fi; -2個でなかった場合使用方法を表示して抜けるサンプル if [ $# -ne 2 ]; then echo "利用方法 $0 引数1 引数2" exit fi **変数の長さ [#q2e8e481] ${#変数名} *繰り返し処理 [#pe2c0147] **繰り返し処理 基本 [#xa1ee348] -a b cを一行ずつ表示する for FILE in a b c do echo ${FILE} done **繰り返し処理 コマンド実行結果[#v9cf52d9] TARGET_FILES=`ls *` for FILE in ${TARGET_FILES} do echo ${FILE} done -複数の決まっているファイルを処理したい場合は"a b c"の様に空白で区切って入れる。 **繰り返し処理応用バージョン ファイルの中身を読み込んで処理 [#uc4c1e0a] for filename in `cat ファイル名` do echo $filename done *if文 [#cfe30026] -基本構文 if [ -f $RESULT ]; then echo "TRUE" else echo "FALSE" fi; -文字列比較 if [ $STR = "比較対象" ]; then -ファイルが存在したらその中身を変数に入れる if [ -f $RESULT ]; then PRE_RESULT=`cat $RESULT` fi; -ファイルが存在しない場合のチェック if [ ! -f $RESULT ]; then PRE_RESULT=`cat $RESULT` fi; -ディレクトリ存在チェック、なければ処理をしない if [ ! -d "/var/tmp" ]; then echo "/var/tmp does not exist!" return fi *case文 [#yf89cecd] -キーから文字を読み込んで分岐させる処理、Javaと違ってcaseの内部でbreakは不要。 #!/bin/bash # read key input from stdin read key # do command case "$key" in "1" ) echo "statement1" echo "statement2";; "2" ) echo "end sign is ;;";; *) echo "一致するものがないときはここ" break ;; esac **コマンドを実行してリターンコードの判定例 [#c56d26a1] -lsを実行して失敗したらメッセージを出す例 ls hoge if [ $? -ne 0 ]; then echo "ERROR!!" exit fi; *関数(サブルーチン、プロシージャ)の定義 [#i18840e1] # 引数は$1,$2でつかえる。呼び出し前に定義しておく必要がある。 doCheck() { echo $1 } # 呼び出しは関数名と引数をスペース区切りで doCheck hogehogehoge fugafuga -関数だけ作ったファイルを外だししておくと便利。呼び出すにはsourceを使う source ./function.sh *その他 [#l7a527c4] **ファイルに日付時刻の接尾語をつける。 [#w7c8d094] SUFFIX=` date '+%Y%m%d%H%M%S'` echo "TEST" > hoge_${SUFFIX} -フォーマットするなら以下のようにする(ファイル名には不適切かも) date '+%Y-%m-%d %H:%M:%S' #counter