Linux 二进制搜索bash脚本

Linux 二进制搜索bash脚本,linux,bash,shell,command-line,Linux,Bash,Shell,Command Line,我有一个脚本,它从一个文件中读取两个数组,一个名为names,另一个名为grades。我需要从用户输入中读取一个名称,该名称也在names数组中 这是文本文件 David 89 Marvin 95 Rich 75 我需要对输入的每个名字使用二进制搜索,并显示其相应的等级。然后继续请求新名称,直到用户不输入任何内容并退出循环 这是我的密码 names=() grades=() while IFS=" " read -r name score do

我有一个脚本,它从一个文件中读取两个数组,一个名为names,另一个名为grades。我需要从用户输入中读取一个名称,该名称也在names数组中

这是文本文件

David 89
Marvin 95
Rich 75
我需要对输入的每个名字使用二进制搜索,并显示其相应的等级。然后继续请求新名称,直到用户不输入任何内容并退出循环

这是我的密码

names=()
grades=()

while IFS=" " read -r name score
do                                                                                                                              
  names+=( "$name" )                                                                                                      
  grades+=( "$grade" )                                                                                            
done < $inputfile

continue=0
while [ $continue == 0 ]
do
    if [[ $continue = 0 ]]; then
            echo " "
            echo "Enter a student's name to get their grade: "
            read sName
            echo "Searching for $sName's grade"
            #binary search                                                                                          
    fi
    if [[ $sName -eq "" && $continue = 0 ]]; then
            echo "End of search"
            continue=1
    fi
done
names=()
等级=()
而IFS=”“read-r name得分
做
名称+=(“$name”)
等级+=(“$grade”)
完成<$inputfile
继续=0
而[$continue==0]
做
如果[[$continue=0]];然后
回声“”
echo“输入学生姓名以获得其分数:”
读斯奈姆
echo“搜索$sName的等级”
#二进制搜索
fi
如果[$sName-eq”“&&$continue=0]];然后
回显“搜索结束”
继续=1
fi
完成

我不知道如何实现这种类型的搜索

第一步是在保持与成绩数组的关联的同时,按词汇对名称数组进行排序-你能事先对文本文件进行排序吗?是的,我可以在@Andy之前对它们进行排序,如果你能告诉我如何处理已排序的数组?我可以更新问题,将名称和等级存储在单独的数组中是否是要求的一部分?这似乎迫使您使用比输入更麻烦的内部格式。或者,这个练习的核心是在(排序的?)Bash数组上进行二进制搜索?然后,您可以删除问题中的所有其他内容。作为旁注,您使用的
-eq
=
完全是错误的-
-eq
用于数字比较,
=
(或非POSIX
=
)用于字符串比较。关联数组将保存二进制搜索,但也许正如@BenjaminW所指出的,这是需求的一部分。