Linux 在if语句中使用退出状态编写Bash脚本

Linux 在if语句中使用退出状态编写Bash脚本,linux,bash,Linux,Bash,这可能是一个新手问题,但无论如何,在我的linux/unix入门课程中,我谈到了bash脚本,在其中一个问题中,我得到了it任务,让我编写一个脚本,因此如果用户搜索到文件中不存在的名称,它会输出一条消息,说“您的输入不在目录中” 它表示使用if语句和退出状态$? 到目前为止,我得到了输入部分,但我不确定如何在if语句中正确使用$?,如果可能的话 #!/bin/bash name=$1 if [ "$name" = "" ] then echo -n "Enter a name to s

这可能是一个新手问题,但无论如何,在我的linux/unix入门课程中,我谈到了bash脚本,在其中一个问题中,我得到了it任务,让我编写一个脚本,因此如果用户搜索到文件中不存在的名称,它会输出一条消息,说“您的输入不在目录中”

它表示使用
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
#/bin/bash
姓名=$1
如果[“$name”=”]
然后echo-n“输入要搜索的名称:”
读名字
fi
grep-i$name~uli101/2014c/phonebook
如果[“$?”<“0”]
然后回显“错误”
fi
我得到一个错误:

./phone4:第14行:0:没有这样的文件或目录

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


注意:我确实使用了
echo$?
来查看
$?
如何在
grep
有效的情况下给出0,而在不起作用的情况下给出1

别介意我的一个朋友把我推向了正确的方向:

我所要做的就是:

    if [ "$?" = "1" ]
       then echo "error"

fi

我想得太多了,我只想说如果$?=1然后是错误,因为在读数中它表示$?可以大于1。我正试图弥补这一点。

别介意我的一个朋友把我推向了正确的方向:

我所要做的就是:

    if [ "$?" = "1" ]
       then echo "error"

fi

我想得太多了,我只想说如果$?=1然后是错误,因为在读数中它表示$?可以大于1。我正试图弥补这一点。

别介意我的一个朋友把我推向了正确的方向:

我所要做的就是:

    if [ "$?" = "1" ]
       then echo "error"

fi

我想得太多了,我只想说如果$?=1然后是错误,因为在读数中它表示$?可以大于1。我正试图弥补这一点。

别介意我的一个朋友把我推向了正确的方向:

我所要做的就是:

    if [ "$?" = "1" ]
       then echo "error"

fi

我想得太多了,我只想说如果$?=1然后是错误,因为在读数中它表示$?可以大于1。我试图对此进行补偿。

其中有两个错误。您已经看到的是在
[]
表达式中,
有两个bug。您已经看到的是在
[]
表达式中,
有两个bug。您已经看到的是在
[]
表达式中,
有两个bug。您已经看到的是,在
[]
表达式中,
应该是

if [ "$?" -gt 0 ]
符号“应该是

if [ "$?" -gt 0 ]
符号“应该是

if [ "$?" -gt 0 ]
符号“应该是

if [ "$?" -gt 0 ]
符号“的“$?”不需要引号,因为它实际上是一个数字。如果您想要更好的脚本,请检查电话簿文件是否存在,如果文件丢失,请在询问名称输入之前退出。此外,如果您在READ命令上不回复任何内容(仅输入),则可能需要执行某些操作

#!/bin/bash

name=$1
phonebook=~/phonebook

if [ "$name" = "" ]
  then
  echo -n "Enter a name to search for: "
  read name
fi

grep -i "$name" $phonebook

if [ $? -gt 0 ]
  then
  echo "error, no \"$name\" in $phonebook"
fi
“$?”不需要引号,因为它实际上是一个数字。如果您想要更好的脚本,请检查电话簿文件是否存在,如果文件丢失,请在询问名称输入之前退出。此外,如果您在READ命令上不回复任何内容(仅输入),则可能需要执行某些操作

#!/bin/bash

name=$1
phonebook=~/phonebook

if [ "$name" = "" ]
  then
  echo -n "Enter a name to search for: "
  read name
fi

grep -i "$name" $phonebook

if [ $? -gt 0 ]
  then
  echo "error, no \"$name\" in $phonebook"
fi
“$?”不需要引号,因为它实际上是一个数字。如果您想要更好的脚本,请检查电话簿文件是否存在,如果文件丢失,请在询问名称输入之前退出。此外,如果您在READ命令上不回复任何内容(仅输入),则可能需要执行某些操作

#!/bin/bash

name=$1
phonebook=~/phonebook

if [ "$name" = "" ]
  then
  echo -n "Enter a name to search for: "
  read name
fi

grep -i "$name" $phonebook

if [ $? -gt 0 ]
  then
  echo "error, no \"$name\" in $phonebook"
fi
“$?”不需要引号,因为它实际上是一个数字。如果您想要更好的脚本,请检查电话簿文件是否存在,如果文件丢失,请在询问名称输入之前退出。此外,如果您在READ命令上不回复任何内容(仅输入),则可能需要执行某些操作

#!/bin/bash

name=$1
phonebook=~/phonebook

if [ "$name" = "" ]
  then
  echo -n "Enter a name to search for: "
  read name
fi

grep -i "$name" $phonebook

if [ $? -gt 0 ]
  then
  echo "error, no \"$name\" in $phonebook"
fi

您希望比较值,对吗,而不是重定向值“0”?使用
-lt
而不是
来比较值,对吗,而不是重定向值“0”?使用
-lt
而不是
来比较值,对吗,而不是重定向值“0”?使用
-lt
而不是
来比较值,对吗,而不是重定向值“0”?使用
-lt
而不是
哦,好吧,那么像-ne一样等于“小于”?我太傻了,我忘了<是一个重定向而不是小于运算符,这学期我还有C的介绍,我只是把命令链接在一起,谢谢你解释
-ne
是“不相等的”,“
-lt
是“小于的”有关更多信息,请参见
mantest
。哦,好的,那么-ne等同于“小于”吗?我太傻了,我忘了<是一个重定向而不是小于运算符,这学期我还有C的介绍,我只是把命令链接在一起,谢谢你解释
-ne
是“不相等的”,“
-lt
是“小于的”有关更多信息,请参见
mantest
。哦,好的,那么-ne等同于“小于”吗?我太傻了,我忘了<是一个重定向而不是小于运算符,这学期我还有C的介绍,我只是把命令链接在一起,谢谢你解释
-ne
是“不相等的”,“
-lt
是“小于的”有关更多信息,请参见
mantest
。哦,好的,那么-ne等同于“小于”吗?我太傻了,我忘了<是一个重定向而不是小于运算符,这学期我还有C的介绍,我只是把命令链接在一起,谢谢你解释
-ne
是“不相等的”,“
-lt
是“小于的”有关更多信息,请参见
人工测试
。正确与正确之间的区别是$?要么是零,要么不是零。所以,它实际上是0,或者