bash 2 期望的整数表达式

bash 2 期望的整数表达式

我刚刚学习 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 时。

我不知道你想用该代码做什么,但似乎你需要回到绘图板。

相关内容