私はbashスクリプトを学んでいます。配列をソートしようとすると、「行10と15に整数式が必要です。何が間違っているのですか?私のスクリプトは次のようになります。
#!/bin/bash
array=('5' '9' '0' '20' '2' '15' '6' '25' '1')
b=0
n=${#array[@]}
i=0
while [ "$i" -lt "$n" ]
do
c=${array[$i]}
d=${array[$i+1]}
if [ "$c" -lt "$d" ]; then
j=0
while [ "$j" -le "$i" ]
do
f=${b[$j]}
if [ "$f" -gt "$c" ];
then b[$j]=$c
echo "${b[$j]}"
fi
j=$(( j+1 ))
done
fi
i=$(( i+1 ))
done
答え1
/ 10進整数比較演算子を使用[
して、常に10進整数ではないオペランドに対してコマンドを呼び出します。-lt
-gt
runスクリプトを使用すると、何が起こっているのかを確認できますbash -x
。次の内容が表示されます。
+ f=
+ '[' '' -gt 0 ']'
./myscript: line 15: [: : integer expression expected
そして:
while [ "$i" -lt "$n" ]
do
[...]
d=${array[$i+1]}
ループの最後のステップでは、配列の最後の要素を超えてアクセスしようとするため、その要素$d
は空になります。
0文字列で初期化$b
してから配列としてアクセスすることもできます。 0の場合を除き、f=${b[$j]}
null値を取得する方法も参照してください。$f
$j
そのコードで何をしたいのかわかりませんが、最初からやり直す必要があるようです。