シェルスクリプト sh

空文字列か判定

シェルスクリプトで空文字列かどうか調べる。 - masa.edw the ハバネロブリーダー

if [ -n "$HOGE" ]; then
   echo "nonzero だよ。"
fi

-n (Nonzero length)

ファイルが存在するか判定

http://www.syns.net/10/index.html#5

次の条件は /tmp/hogeファイルが存在する場合としない場合で動作を分ける条件判定です。

if [ -f /tmp/hoge ]; then
  :
else
  echo "hoge file is nothing"
exit 
fi

引数を処理する getopts

getopts - コマンド "getopt", "getopts" の使い方を把握する - spikelet days

#!/bin/sh
# sample code for getopts built-in.

while getopts "abc:d:" flag; do
  case $flag in
    \?) OPT_ERROR=1; break;;
    a) opt_a=true;;
    b) opt_b=true;;
    c) opt_c="$OPTARG";;
    d) opt_d="$OPTARG";;
  esac
done

shift $(( $OPTIND - 1 ))

if [ $OPT_ERROR ]; then      # option error
  echo >&2 "usage: $0 [-ab] [-c arg1] [-d arg2] ..."
  exit 1
fi

echo AFTER: opt_a=$opt_a, opt_b=$opt_b, opt_c=$opt_c, opt_d=$opt_d, rest="$@"

直前に実行されたコマンドのステータス

シェルの変数に慣れる:ステップ・バイ・ステップ・シェルスクリプト(5) - @IT

$?
直前に実行されたコマンドのステータス(終了フラグ)を表します。これを使って実行されたコマンドが正しく終了したかどうか判定します。

for 連番

シェルスクリプト中で連番や複数回の繰り返しが必要になった場合、BSD系 (4.2BSD以降・Mac含む) では jotGNU系では seq を使うことが多い。が、普通は片方しか入っていないし、互換性も全く無いというやっかいな代物。

jot 回数
jot 回数 開始
jot 回数 開始 終了
jot 回数 開始 終了 増加
seq 終了
seq 開始 終了
seq 開始 増加 終了

シェルスクリプト中で連番を得る - Magical Diary

for i in `jot 10`; do echo $i; done

日付の連番

for i in `jot 10 0`; do echo `date -j -v+${i}d 1201010000 +%Y%m%d`; done
20120101
20120102
20120103
20120104
20120105
20120106
20120107
20120108
20120109
20120110