【问题标题】:How to do a if-else operation in ksh command from parsing如何通过解析在 ksh 命令中执行 if-else 操作
【发布时间】:2023-12-02 23:28:01
【问题描述】:

我正在尝试在 ksh shell 脚本中使用which 命令查找守护进程的路径

但如果守护程序不存在,它会以格式给出警告..

no DaemonName .....bla bla bla

但由于我无法直接显示,我目前这样做

tmp=`which daemonName`
tmp2=`which daemonName | grep "no DaemonName"`
if [[ "$tmp2" != "" ]]
tmp=wrong name

我怎样才能在简单的一行中做同样的事情?

我真正想要的是,如果守护程序不存在,它应该给出一个默认字符串,而如果存在它应该给出which 命令输出。

【问题讨论】:

    标签: shell ksh daemon


    【解决方案1】:

    这将像你想要的那样设置 tmp 变量:

    tmp=$(which daemonName) || tmp="wrong name"
    

    编辑:这个建议的一个问题是 which 命令行为没有标准化,正如 AIX 奇数实现所展示的那样。

    当您使用ksh 时,一个简单的解决方法是将which 命令替换为whence 内置命令:

    tmp=$(whence -f daemonName) || tmp="wrong name"
    

    【讨论】:

    • 我会说你的哪个命令坏了。请告知您使用的操作系统、“ksh”和“哪个”版本。
    • 操作系统是 AIX 6.2 :P 这就是我所知道的一切 :D
    【解决方案2】:

    这样做:

    tmp=$(which dawmonName 2>/dev/null)
    : ${tmp:=wrong name}
    echo "$tmp"
    

    := 部分分配如果变量为 null 或未设置的文本。 : 命令除了允许参数扩展或其参数之外什么都不做。

    【讨论】:

      【解决方案3】:

      which 不会在我的分发版中报告该错误,但这可能对您有用:

      tmp=`which daemonName 2> /dev/null`
      ...
      

      基本上,您只是丢弃发生的任何错误消息。

      【讨论】:

      • 但这会给我一个空白的 tmp 变量