すごくあふぉなことをしたので、自戒を込めて投稿します。
3つの引数(整数)を数値の小さい順に並べ替える、という課題です。
# 間違い!
#!/bin/bash
n1=${1:?}
n2=${2:?}
n3=${3:?}
if [ $n1 > $n2 ];then
tmp=$n1
n1=$n2
n2=$tmp
fi
if [ $n2 > $n3 ];then
tmp=$n2
n2=$n3
n3=$tmp
fi
if [ $n1 > $n2 ];then
tmp=$n1
n1=$n2
n2=$tmp
fi
echo $n1 $n2 $n3
シェルスクリプトのtestコマンドに、>
というのは指定できません。
このコードを実行すると、2つ目と3つ目に指定した名前のファイルができて、if 文はすべて true になります。
つまり、>
はリダイレクトの記号として解釈されるようです。
なぜ test 1
や test 0
がtrue になるのかはよくわかりませんでした。
正しくは、こう。
# 正しい
#!/bin/bash
n1=${1:?}
n2=${2:?}
n3=${3:?}
if [ $n1 -gt $n2 ];then
tmp=$n1
n1=$n2
n2=$tmp
fi
if [ $n2 -gt $n3 ];then
tmp=$n2
n2=$n3
n3=$tmp
fi
if [ $n1 -gt $n2 ];then
tmp=$n1
n1=$n2
n2=$tmp
fi
echo $n1 $n2 $n3
-gt
(is greater than: > )を指定します。
以上です。