2017-10-12 55 views
0
array=($(<abc.txt)) 
len=${#array[*]} 
i=0 
while [ $i -lt "$len" ] 
do 
j=0 
while [ $j -lt $(((len - 1)) - i)) ] 
do 
    k=$((j + 1)) 
    if [ "${array[$j]}" -gt "${array[$k]}" ] 
    then 
    temp=${array[$j]} 
    array[$j]=${array[$k]} 
    array[$k]=$temp 
    fi 
j=$k 
done 
i=$((i + 1)) 
done 
echo "${array[@]}" 

我的数组没有排序,我也收到一条消息“:integer expression expected”。它可以在我朋友的电脑上正常工作。我只想从另一个文件输入一个数组,然后使用bubblesort。如果我将数组声明为array =(1 2 3 4 9 8 7 6 5),它也可以正常工作。给定的bash脚本中的错误用于bubblesort的位置?

+0

任何你不使用'sort'命令的原因? –

+0

您不需要嵌套算术表达式; $(((len-1)-i))'就足够了。 – chepner

+0

,因为作为学生我要实现bubblesort算法 –

回答

0

您的括号在第二条语句中不匹配,我更改了 len声明。 chepner是正确的,shellcheck.net会为你解决这个问题。 (你甚至可以在本地安装shellcheck。)

#!/bin/bash 
#array=($(<abc.txt)) 
array=(1 2 3 4 9 8 7 6 5) 
len=${#array[@]} 
i=0 
while [ $i -lt "$len" ] 
do 
j=0 
while [ $j -lt "$(((len - 1) - i))" ] 
do 
    k=$((j + 1)) 
    if [ "${array[$j]}" -gt "${array[$k]}" ] 
    then 
    temp=${array[$j]} 
    array[$j]=${array[$k]} 
    array[$k]=$temp 
    fi 
j=$k 
done 
i=$((i + 1)) 
done 
echo "${array[@]}" 
+0

当我在数组中输入数字时,我的文件正常工作,但是当我从文件中输入数据时出现问题。如果我在输入文件的最后一位数字后面没有空格,则CR(\ r)会显示最后一位数字。 –

+0

我已经尝试了与CR和没有,它仍然有效。在debian8 linux上测试bash 4.4.12确实echo -n“$ {array [@]}”解决你的问题? –

+0

对我来说,CR不允许排序。我使用Ubuntu 16.0.4,当我使用'set -vx'时,其中一行是'+'['9-gt $'5 \ r'']' :预期的整数表达式 '。 –