【发布时间】:2015-05-07 09:20:33
【问题描述】:
我最近为另一个问题发布了相同的代码。我得到了帮助,但是在尝试实现 If-Then 语句时,它返回了错误的结果。因此,在这个主题中,我将有 2 个问题。
第一个问题: 在文件中执行搜索时,如何实现搜索,使大写或小写没有返回所需记录的依据?
第二个问题: 在我的 If-Then 语句中,无论我键入什么,它都会显示 If-Then 语句的 else 部分。例如,名称 Smith 在文件中,但无论我输入“Smith”还是“smith”都会产生与“echo "Error: $last_name is not in file"”相同的结果。
另外: 这必须用 korn shell 编程编写。
代码如下:
#Gather search parameter
read last_name
if grep -Fxq "$last_name" $1
then
while IFS=: read c1 c2 c3 c4 c5 c6 c7 rest ; do
case "$c1" in
"$last_name" )
echo -e "Last Name: $c1\nFirst Name: $c2\nCity: $c3\nState: $c4\nClass: $c5\nSemester Enrolled: $c6\nYear First Enrolled: $c7\n\n"
;;
esac
done < $1
else
echo "Error: $last_name is not in file"
fi
;;
任何对此编码的见解将不胜感激。
编辑:
用户输入 1
用户输入:史密斯
预期输出: 姓名:史密斯 名字:约翰 ....
实际输出:
错误:史密斯不在文件中
用户输入 2
用户输入:史密斯
预期输出:
错误:史密斯不在文件中
实际输出:
错误:史密斯不在文件中
【问题讨论】:
-
好的,将 grep -Fxq 更改为 grep -Fiq 如果我将其全部保留为小写,例如 smith,它仍然不会提取 Smith 记录。但是,现在输入“Smith”会拉出文件,而不是之前会给出错误消息。奇怪的一件事是,如果我输入“smith”,它不会显示错误消息,它只是退出 case 语句。
-
那是因为您的 grep 搜索不区分大小写,但大小写字符串比较不区分大小写。请查看我的回答
标签: unix if-statement ksh