我刚刚学习 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
您[
使用-lt
/-gt
十进制整数比较运算符对并不总是十进制整数的操作数调用该命令。
您可以看到如果使用 运行脚本会发生什么bash -x
。你会看到类似这样的东西:
+ f=
+ '[' '' -gt 0 ']'
./myscript: line 15: [: : integer expression expected
和:
while [ "$i" -lt "$n" ]
do
[...]
d=${array[$i+1]}
在该循环的最后一次传递中,您将尝试访问超出数组最后一个元素的内容,因此$d
将为空。
您还可以将其初始化$b
为 0 字符串,然后将其作为数组进行访问。另请参阅如何f=${b[$j]}
让您获得空值$f
,除了当$j
为 0 时。
我不知道你想用该代码做什么,但似乎你需要回到绘图板。