linux - 在 if 语句中使用退出状态的 Bash 脚本

标签 linux bash

可能是一个新手问题,但无论如何,在我的 linux/unix 类(class)介绍中涉及 bash 脚本,在我遇到的一个问题中,它要求我制作一个脚本,这样如果用户在文件中搜索名称那不在那里它会输出一条消息说“your_input不在目录中”

它说使用 if 语句和退出状态 $?

到目前为止,我得到了输入部分,但我不确定如何在可能的情况下在 if 语句中正确使用 $?

#!/bin/bash
name=$1

if [ "$name" = "" ]

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

        read name

fi

grep -i $name ~uli101/2014c/phonebook

if [ "$?" < "0" ]

   then echo "error"

fi

我得到错误:

./phone4: line 14: 0: No such file or directory

我的问题是:如何使用 $? with 和 if 语句,如果我不能,你能解释一下如何使用 $? 在这个问题中?

注意:我确实使用了 echo $? 来查看如果 grep 有效,$? 如何给出 0如果没有,则为 1

最佳答案

其中有两个错误。您已经看到的是 [] 中的那个表达式,<不被解释为“小于”,而是被解释为流重定向运算符。原因是 [只是另一个程序( test 的别名),所以 [ "$?" < "0" ]类似于 cat < filename .另一个错误是您不想检查“小于”而是“不等于”。总结:

if [ "$?" < "0" ]

应该是

if [ "$?" -ne "0" ]

或者你可以这样写

if ! grep "$name" ~uli101/2014c/phonebook

...因为if将返回代码零解释为 true,将其他所有内容解释为 false。

关于linux - 在 if 语句中使用退出状态的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208713/

相关文章:

regex - 如何将加号与字符类一起用作正则表达式的一部分?

bash - 通过 ssh 调用交互式 bash 脚本

linux - socket() 和 socketpair() 的域参数

linux - 在 bash 脚本中连接两条指令

linux - readelf 命令中 mips 标志的含义?

linux - 如果脚本从另一个脚本开始,Bash 陷阱将不起作用

linux - 我在 bash 中遇到“没有这样的文件或目录”错误,但它似乎并没有在文件上失败

windows - 设置代理服务器的步骤

c - 线程中的信号处理程序

bash - 提取文件名 shell 脚本的一部分