Unix shell函数,命令替换和退出

时间:2011-10-04 17:46:04

标签: shell unix ksh

请解释一下如何正确使用unix shell功能。

例如,我们有以下函数f和g:

f()
{
   #do something
   return $code
}

g()
{
   print $something
}

我们可以在下一个方式使用函数f:

f
if [[ $? -eq 0 ]]; then
   #do 1
else
   #do 2
fi

此功能执行一些工作并退出并退出状态 我们可以分析这种退出状态。

我们可以在下一个方式使用函数g:

g

result=$(g)
if [[ $result = "something" ]]; then
   #do something
fi

在第一种情况下,我们刚刚调用了函数 在第二种情况下,我们使用命令替换将函数打印的所有文本分配给stdout到变量result。

但如果有以下功能怎么办:

z()
{
   user=$1
   type=$2
   if [[ $type = "customer" ]]; then
      result=$(/somedir/someapp -u $user)
      if [[ $result = "" ]]; then
         #something goes wrong
         #I do not want to continue
         #I want to stop whole script
         exit 1
      else
         print $result
      fi
   else
      print "worker"
   fi
}

我可以在下一个方式使用函数z:

z

如果出现问题,则会停止整个脚本 但是如果有人在命令替换中使用此函数会怎么样:

result=$(z)

在这种情况下,如果someapp返回空字符串,则不会停止脚本 在函数中使用exit是不正确的方法?

1 个答案:

答案 0 :(得分:1)

我现在没有办法测试这个,但是ksh(也许是bash),可以将变量范围内的函数。

z()
{
   typeset result
   user=$1
   type=$2
   if [[ $type = "customer" ]]; then
      result=$(/somedir/someapp -u $user)
      if [[ $result = "" ]]; then
         #something goes wrong
         #I do not want to continue
         #I want to stop whole script
         exit 1
      else
         print $result
      fi
   else
      print "worker"
   fi
}

请注意在顶部附近插入typeset result

您可能需要使用函数的备用声明才能使用此功能,即

 function z {
    #....
  }

我希望这会有所帮助。

您也可以执行类似

的操作
  result=$(z ; "eval retCode=\$? ; echo \$retCode" )