脚本返回不需要的输出

脚本返回不需要的输出

这是我当前拥有的(顶部 bash 窗口)和语法返回的结果(底部 bash 窗口)。

当名称不存在时,例如“xyz”,它会返回适当的响应。

当名称确实存在时,例如“joel”,它会在提供正确的响应之前回显不需要的响应。

我缺少什么?

name=$1
OUTPUT=$(grep -i $name ~uli101/2016c/phonebook)

if [ "$name" = "" ]

then echo -n "Enter a name to search for: "

        read name

fi



if [ $? -ne 1 ]

then echo "Name $name not in directory"

fi

grep -i $name ~uli101/2016c/phonebook
~
:~/scripts> phone4 xyz
Name xyz not in directory
:~/scripts> phone4 joel
Name joel not in directory
SHAPRIO JOEL                SH      4802   BUSINESS STUDIES DIVISION
:~/scripts> 

答案1

您的脚本报告未找到该名称,然后报告该名称存在。这是因为你的病情if [ $? -ne 1 ]。 “$?”表示脚本中最后一个表达式的返回码。在本例中,它是前一个“if”块的返回代码。

要获得所需的结果,请将“grep”命令移动到第一个和第二个“if”块之间。这样第二个“if”将评估 grep 的结果。如果 grep 找到结果,它将打印该结果,并且返回码将为 0,并且该块将被跳过。如果 grep 没有找到结果,它应该不打印任何内容,并且返回码将为 1,从而导致执行条件。

答案2

并非所有版本grep知道关于-q 我使用的一个小技巧 - 当我只对命令的状态感兴趣时,就是在命令前加上“nohup”前缀 - 因为我很懒,忘记了“重定向方式”

诺哈普方式

nohup grep -i string_arg file_args >/dev/null
status=$?

重定向方式

grep -i string_arg file_args  2>&1 >/dev/null
status=$?

相关内容