【发布时间】:2016-08-27 18:55:20
【问题描述】:
设计一个接受输入字符串(州名)的 shell,并查找该州的所有大学。如果找到,则显示所有大学作为输出,否则显示错误消息,如“文件中未找到 xxx”。这里 xxx 是输入字符串。 (提示:这可以通过将搜索结果重定向到一个文件然后检查该文件是否为空来完成)。例如,如果输入字符串是“NSW”,则输出应该是新南威尔士州所有大学的列表。如果输入为“AUS”,则应显示一条错误消息,指出“在文件中未找到 AUS”。
这是我的代码:
#!/bin/sh
echo "Please enter State of Uni (e.g NSW ; NAME MUST BE UPPER CASE)"
read State
if [ -n $State ]
then
grep "$State" Aus-Uni.txt
else
echo "$State was not found in the file"
fi
exit
即使我输入的字符串在文件中找不到,也不会弹出错误的语句。不知何故,真正的陈述被粗略地执行了。
【问题讨论】:
-
再次检查 if 语句检查的内容。
-
请注意,您可以使用:
if [ -z "$State" ]; then echo "You didn't type a state abbreviation" >&2; elif ! grep "$State" Aus-Uni.txt; then echo "$State was not found in the file Aus-Uni.txt" >&2; fi... 报告标准错误,并在未找到 AUS 时发现,以及其他改进。仅当给定名称为空时才报告未找到状态 - 与请求的名称不完全一致。 -
为什么将状态作为输入而不是参数?只需将其作为参数传递,您的整个脚本就会变为
grep "$1" Aus-Uni.txt || echo "$1 was not found in Aus-Uni.txt" >&2 -
当您通过
-n $State测试并执行grep时,将无法到达属于-n $State测试的else代码。请在$State周围加上引号。