if + 複数の条件
if [ 0 = 0 ] && [ 1 = 1 ] ; then
echo OK
else
echo NG
fi
#=> OK
if [ 0 = 0 ] && [ 1 = 2 ] ; then
echo OK
else
echo NG
fi
#=> NG
ユーザに YES/NO を選択させる
choice="null"
while [ $choice = "null" ] ; do
printf "Type yes/no: "
read choice
case $choice in
yes)
echo YES; break
;;
no)
echo NO; break
;;
*)
choice="null"
;;
esac
done
先頭に0を付けると8進数扱いになる
$ printf "%d\n" 07
7
$ printf "%d\n" 08
printf: 3016-002 08 は完全には変換されませんでした。
0
$ printf "%d\n" 010
8
10進数として扱うために expr を使う。
$ echo `expr 08`
8
$ echo `expr 09`
9
$ echo `expr 10`
10
処理の開始・終了時刻を処理終了時に表示
$ start_time=`date`
$ ## 時間のかかる(複数の)処理
$ echo ${start_time} -- `date` #=> Mon Aug 24 12:00:00 JST 2009 -- Mon Aug 24 13:00:00 JST 2009
引数のチェック
if [ $1 ] ; then # $1 が存在すれば
FOO=$1
else
echo ARGV1 is essential
exit 1
fi
if [ $1 = "aaa" ] || [ $1 = "bbb" ] ; then
FOO=$1
else
echo ARGV1 must be "aaa" or "bbb"
exit 1
fi
ワンライナー + while
$ while true ; do tail foo.log ; sleep 10 ; done
整数の演算、桁の整形
引数に整数を受け取り、1を加算し、0 でパディングして 4桁にする。
x=`printf %04d $(($1+1))`
echo $x
コマンドの終了ステータスで処理分岐
#!/usr/bin/ksh
ls xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ## 終了ステータスを返すコマンド
status=$?
if [ $status = 0 ] ; then
echo $status OK
else
echo $status NG
fi