Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本显示相同的级别_Bash - Fatal编程技术网

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

我必须编写一个bash脚本,用户从学生和成绩列表中输入一个名字,然后显示名字和成绩。这是一个二进制搜索,我必须先对列表进行排序,然后使用中间点检查名称。我写了这段代码,但不管我输入什么名字,它只显示相同的等级,如果名字不在列表中,它会显示名字和固定等级

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))