繁体   English   中英

UNIX Shell脚本if和grep命令设置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM