[英]UNIX shell scripting if and grep command setting
设计一个外壳程序,该外壳程序接受状态名称的输入字符串,并查找处于该状态的所有大学。 如果找到,它将显示所有大学作为输出,否则将显示错误消息,例如“在文件中未找到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
即使在文件中找不到我输入的字符串,也不会弹出错误语句。 某种程度上说,真实的语句可以粗略地执行。
首先,您无法检查用户输入是否符合要求全部大写的要求。
您可以使用[shell参数扩展]在处理之前将输入转换为全部大写,例如:
echo "Please enter State of Uni (e.g NSW)"
read State
State="${State^^}" # Check ${parameter^^pattern} in the link
更改
if [ -n $State ]
至
if [ -n "$State" ]
# You need to double-quote the arguments for n to work
# You can't use single quotes though because variable expansion won't happen inside single quotes
这只会检查字符串是否为非空
[[ -n $State ]]
如果检查成功,则grep会运行-但是不会检查grep的成功
尝试这个
if [[ -n $State ]]; then
if ! grep "$State" Aus-Uni.txt; then
echo "$State was not found in the file"
exit 2
fi
else
echo "State is empty"
exit 1
fi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.