linux 如何在bash脚本中执行if语句来检查函数的退出状态?

lnvxswe2  于 2023-05-22  发布在  Linux
关注(0)|答案(1)|浏览(122)

我想写一个函数来检查执行的Linux命令的退出状态,并在命令执行失败或正确执行时进行回声。

#!/bin/bash

check_command(){

if [$? -eq 0]
then
  echo "Command Executed"
else
  echo "Command Failed"
fi

}

ls -la
check_command()

当我运行这个bash脚本时,我得到以下错误。

test_command.sh: line 16: syntax error: unexpected end of file

需要什么代码才能正确执行脚本而不出错?

ftf50wuq

ftf50wuq1#

您有基本的格式错误,并且未能将退出条件传递给check_command()函数以与0进行比较。

  • 您需要在[ ... ]的参数旁边留出一个空格,例如:[ "$1" -eq 0 ](注:始终在[ ... ]中引用变量
  • 必须将退出条件作为参数传递给函数,例如:调用您的命令,然后将$?作为参数传递给check_command(),例如:
ls -la > /dev/null
check_command $?

(**注意:**调用函数时不要在末尾包含()
然后函数$1的第一个位置参数将包含退出条件,例如:

check_command(){
  
  if [ "$1" -eq 0 ]
  then
    ...

把它放在一起,你可以做:

#!/bin/bash

check_command(){
  
  if [ "$1" -eq 0 ]
  then
    echo "Command Executed"
  else
    echo "Command Failed"
  fi

}

ls -la > /dev/null
check_command $?

(note:重定向到/dev/null,以抑制ls -al输出,如果需要,可以删除)
对于大多数命令,不需要编写一个函数来检查退出状态。您可以简单地使用||创建一个复合命令,其中实用程序本身将错误写入stderr,您可以退出(或以任何方式处理失败),例如。

ls -la || {
  echo "Command Failed" >&2
  exit 1
}

如果您想在命令成功时执行某些操作,可以使用command && cmd_on_success
如果将脚本粘贴到ShellCheck中,它将发现存在的任何语法和脚本问题。这给予解决简单问题的好方法。

相关问题