シェルスクリプトメモ

ファイルなどの有無をチェックをする

シンボリックリンクやパイプなどファイルタイプのチェックはほとんどできる。

[ -f (file) ] (file)が存在するか
[ -x (file) ] (file)が存在して、(実行ユーザでの)実行権限があるか
[ -d (dir)  ] (dir) が存在するか(ファイルだとエラー)

変数の中身をチェックする

変数を何かしらの定数と比較。つまり、演算式の左辺と右辺が必要なタイプ。

[ ${var} -eq (定数) ] ${var}が(定数)と(数値として)同じかどうか
[ ${var} -le (定数) ] ${var} <= (定数) (less equal)
[ ${var} -lt (定数) ] ${var} <  (定数) (less than)
[ ${var} -ge (定数) ] ${var} >= (定数) (grater equal)
[ ${var} -gt (定数) ] ${var} >  (定数) (grater than)
[ ${var} = (文字列) ] ${var}が(文字列)と文字列として同じかどうか

変数の中身をチェックする

変数の何かしらの属性を調べる。つまり、演算式の右辺しかないもの。

[ -z ${var} ]     ${var}の文字列の長さが0かどうか
[ -n ${var} ]     ${var}と文字列の長さがあるか( -z の反対 )

引数の取り出し方

シェルスクリプトへ渡した引数を一つずつ取り出す時、"$*"と"$@"の使い方で結果が違う。

$ cat test.sh
for i in $*
do
 echo $i
done
$ sh test.sh a b c "d e f"
a
b
c
d
e
f
$ cat test.sh
for i in "$*"
do
 echo $i
done
$ sh test.sh a b c "d e f"
a b c d e f
$ cat test.sh
for i in $@
do
 echo $i
done
$ sh test.sh a b c "d e f"
a
b
c
d
e
f
$ cat test.sh
for i in "$@"
do
 echo $i
done
$ sh test.sh a b c "d e f"
a
b
c
d e f