Bash脚本显示相同的级别
我必须编写一个bash脚本,用户从学生和成绩列表中输入一个名字,然后显示名字和成绩。这是一个二进制搜索,我必须先对列表进行排序,然后使用中间点检查名称。我写了这段代码,但不管我输入什么名字,它只显示相同的等级,如果名字不在列表中,它会显示名字和固定等级Bash脚本显示相同的级别,bash,Bash,我必须编写一个bash脚本,用户从学生和成绩列表中输入一个名字,然后显示名字和成绩。这是一个二进制搜索,我必须先对列表进行排序,然后使用中间点检查名称。我写了这段代码,但不管我输入什么名字,它只显示相同的等级,如果名字不在列表中,它会显示名字和固定等级 sort -o sorted.dat sort.dat ((count = 0)) while read names[$count]; do ((count++)) done<sorted.dat # Store the names a
sort -o sorted.dat sort.dat
((count = 0))
while read names[$count]; do
((count++))
done<sorted.dat
# Store the names and grades into arrays
names=( $( cut -d: -f1 name.txt ) )
grades=( $( cut -d: -f2 name.txt ) )
# Prompt user for a name
echo "Type the student's name (use proper capitalization!), followed by [ENTER]:"
# Read the user's response
read names
length=${#names[@]}
start=0
end=$((length - 1))
match=0
while [[ $start -le $end ]]; do
middle=$((start + ((end - start)/2)))
middle_name=${names[$middle]}
if [[ $middle_name -gt $name ]]; then
end=$((middle-1))
echo "${name}'s grade is a(n): ${grades[$name]}."
elif [[ $middle_name -lt $name ]]; then
start=$((middle+1))
echo "${name}'s grade is a(n): ${grades[$name]}."
else
# A match was found
match=1
echo "${name}'s grade is a(n): ${grades[$middle_name]}."
break
fi
done
# Check if a match was found
if [[ $match = 0 ]]; then
echo "Couldn't find that student..."
fi
sort-o sorted.dat sort.dat
((计数=0))
读取名称[$count];做
((count++)
先读取一个shebang,然后将脚本粘贴到那里:您可以使用readarray
将文件读入数组,而不是编写自己的循环。-gt
和-lt
用于比较数字,而不是字符串。您正在用名称=($(cut-d:-f1 name.txt)覆盖排序文件中的名称
数组)
添加一个shebang,然后将脚本粘贴到其中:您可以使用readarray
将文件读入数组,而不是编写自己的循环。-gt
和-lt
用于比较数字,而不是字符串。您正在使用名称=($(cut-d:-f1 name.txt))