空文字列か判定
シェルスクリプトで空文字列かどうか調べる。 - 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含む) では jot、GNU系では seq を使うことが多い。が、普通は片方しか入っていないし、互換性も全く無いというやっかいな代物。
jot 回数
jot 回数 開始
jot 回数 開始 終了
jot 回数 開始 終了 増加
seq 終了
seq 開始 終了
seq 開始 増加 終了
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