Shell 不匹配模式的grep命令退出代码

Shell 不匹配模式的grep命令退出代码,shell,grep,exit-code,Shell,Grep,Exit Code,我已经编写了一个运行crontab-l命令的shell脚本 为了使它更易于使用,我还为用户提供了将命令行参数传递给脚本的功能,该脚本将充当grep命令的模式输入,以便用户可以过滤掉所有他/她不需要看到的内容 以下是脚本:- 1 #!/bin/bash 2 if [[ $1 == "" ]]; then 3 echo -e "No Argument passed:- Showing default crontab\n" 4 command=$(cro

我已经编写了一个运行
crontab-l
命令的shell脚本

为了使它更易于使用,我还为用户提供了将命令行参数传递给脚本的功能,该脚本将充当grep命令的模式输入,以便用户可以过滤掉所有他/她不需要看到的内容

以下是脚本:-

  1 #!/bin/bash
  2 if [[ $1 == "" ]]; then
  3         echo -e "No Argument passed:- Showing default crontab\n"
  4         command=$(crontab -l 2>&1)
  5         echo "$command"
  6 else
  7         rc=$?
  8         command=$(crontab -l | grep -- "$1" 2>&1)
  9         echo "$command"
 10         if [[ $rc != 0 ]] ; then
 11                 echo -e "grep command on crontab -l was not successful"
 12         fi
 13 fi
这就是我运行它的方式

$ ./DisplayCrontab.sh
现在,如果我不传递任何命令行参数,它将显示完整的crontab

如果我传递crontab中不存在的任何垃圾模式,它将显示以下消息:-

 grep command on crontab -l was not successful
但即使我在crontab中传递了一个确实存在于几行中的模式,我也会得到这种输出:-

#matching lines
#matching lines
#matching lines

grep command on crontab -l was not successful
为什么我让grep命令在底层不成功?我如何才能摆脱它


脚本有什么问题吗?

您在执行之前捕获的退出代码应该是:

command=$(crontab -l | grep -- "$1" 2>&1)
rc=$?
要测试此代码,请使用数字运算符:

[[ $rc -ne 0 ]]
格雷普·曼:

正常情况下,如果找到选定的行并且 1否则。但如果发生错误,退出状态为2


哦,这段时间我一直在想,当我做
echo“$command”
时,只有我的命令会被执行,啊,还有很多东西要学。谢谢:)