コマンドライン引数なしで、この関数はランダムな単語を返したいと思います。
#$-ne 1でも動作するようにlinuxconfig.orgのランダムワードジェネレータを修正しています。
function random-word {
if [ $# -eq 0 ] ;
then
echo "I only take one argument, dummy"
# previously was exit 0
fi
# Constants
X=0
ALL_NON_RANDOM_WORDS=/usr/share/dict/words
# total number of non-random words available
non_random_words=`cat $ALL_NON_RANDOM_WORDS | wc -l`
# while loop to generate random words
# number of random generated words depends on supplied argument
while [ $X -lt "$1" ]
do
random_number=`od -N3 -An -i /dev/urandom |
awk -v f=0 -v r="$non_random_words" '{printf "%i\n", f + r * $1 / 16777216}'`
sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS
let "X = X + 1"
done
文が実行されますが、bashエラーが発生します。
$ bob
I only take one argument, dummy
bash: [: : integer expression expected
bashエラーが表示されないようにするにはどうすればよいですか?
ベストアンサー1
while [ $X -lt "$1" ]
1ドルも評価されません。
これが発生しないように、残りのコードをelseブロックに移動してください。
function random-word {
# from linuxconfig.org
if [ $# -eq 0 ]
then
echo "I need an argument, dummy"
# To be extra friendly, give them a random word.
echo "Here's a random word:"
random-word 1
else
# Constants
X=0
...
sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS
let "X = X + 1"
done
fi
}