bash,每次输入未识别的参数时,在终端中打印0



我有一个bash程序,该程序从看起来像这样的文件中提取标记:

 Jack ex1=5 ex2=3 quiz1=9 quiz2=10 exam=50

我希望代码执行,以便当我输入终端时:

./program -ex1 -ex2 -ex3

杰克的数据中没有EX3,因此将返回0的输出:

Jack 5 3 0

如何为每个未识别参数的程序编码我的程序输出0?

如果我了解您要做的事情,那并不困难。您需要做的是将每行读取到name,其余部分读为marks。(输入是从stdin读取的)

然后,对于命令行上给出的每个参数,检查第一部分是否匹配marks中任何等级的开头(=符号的左侧大小)。如果这样做,请保存grade=符号的右侧),然后将found标志设置为1

检查第一个参数的所有标记后,如果found标志为1,则输出grade,否则输出0。重复所有命令行参数。(然后,对于所有文件中的学生),如果您有疑问,请告诉我:

#!/bin/bash
declare -i found=0                  # initialize variables
declare -i grade=0
while read -r name marks; do        # read each line into name & marks
    printf "%s" "$name"             # print student name
    for i in "$@"; do               # for each command line argument
        found=0                     # reset found (flag) 0
        for j in $marks; do         # for each set of marks check for match
            [ $i = -${j%=*} ] && { found=1; grade=${j#*=}; } # if match save grade
        done
        [ $found -eq 1 ] && printf " %d" $grade || printf " 0" # print grade or 0
    done
    printf "n"                     # print newline
done
exit 0

输出

$ bash marks_check.sh -ex1 -ex2 -ex3 < dat/marks.txt
Jack 5 3 0

相关内容

  • 没有找到相关文章

最新更新