冒泡排序bash脚本



我正在尝试使用bubble排序在bash中按字典顺序对名称列表及其分数进行排序

Ted 86
Anthony 70
Mark 95
Kyle 65
David 75

名称存储在数组名称中,分数存储在数组分数中

这是我的代码,它在第30行给了我一个错误,说";对于许多论点";我似乎找不到原因。

#! /bin/bash
inputfile="$1"
if [[ !(-f "$1") ]]; then
echo "$1 must be a file"
exit 1
else
echo "$1 is a file"
fi
names=()
scores=()
while IFS= read -r name score
do
names+=( "$name" )
scores+=( "$score" )
done < $inputfile
echo "The arrays before sorting"
for (( i=0; i<${#names[@]}; ++i ))
do
echo "${names[$i]} ${scores[$i]}"
done
echo "The sorted arrays using bubble sort"
for (( i = 0; i < ${#names[@]}; i++ ))
do
for (( j = $i; j < ${#names[@]}; j++ ))
do
if [ ${names[$i]} -gt ${names[$j]} ]; then #error here
t=${names[$i]}
names[$i]=${names[$j]}
names[$j]=$t
fi
done
done
for (( i=o; i<${#names[@]}; ++i ))
do
echo "${names[$i]}"
done

有人能复制粘贴一下,看看他们是否有同样的问题吗?

而IFS=read-r name score

错误。有了IFS=,没有字不被拆分——整行被分配给name,而score总是空的。

我似乎找不到原因。

因为您向[传递了多个参数,所以它扩展到例如i=0 j=1:

# if [ ${names[$i]} -gt ${names[$j]} ]
# expands to:
if [ Ted 86 -gt Anthony 70 ]

没有一个[程序接收到6个参数,并且不知道该如何处理这些参数,因此它退出时会出现错误。当你解决上面提到的IFS问题时——仍然是将名称作为数字-gt进行比较——我想你是想根据分数而不是姓名对人们进行排序。

最新更新