bash shell 脚本:条件字符串连接

Posted

技术标签:

【中文标题】bash shell 脚本:条件字符串连接【英文标题】:bash shell scripting: conditional string concatenation 【发布时间】:2021-12-31 23:11:32 【问题描述】:

我想有条件地将文本提交到另一个 shell 脚本中。这意味着我想在 deb=1 的情况下将“WARNING”替换为“INFO”:

#!/usr/bin/env bash
...
if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]]
then 
    ./discord.sh --webhook-url=$url --text "WARNING: $abc"
fi

我还想避免另一个完整的 IF 语句。我希望有类似的东西

deb=1 ? "INFO" : "WARNING"

这行得通吗?如果是,完整的陈述会是什么样子? “--文字...”

提前谢谢你。

【问题讨论】:

【参考方案1】:

可以使用数组索引来匹配带有名称字符串的数字日志级别:

#!/usr/bin/env bash

url=https://example.com/hook

logLevel=(WARNING INFO)

for abc in 97 98; do
  for deb in 0 1; do
    printf 'abc=%d, deb=%d:\n' $abc $deb
    (((i = 1 == deb) || 98 > abc)) &&
      echo ./discord.sh --webhook-url=$url --text "$logLevel[i]: $abc"
  done
done

输出:

abc=97, deb=0:
./discord.sh --webhook-url=https://example.com/hook --text WARNING: 97
abc=97, deb=1:
./discord.sh --webhook-url=https://example.com/hook --text INFO: 97
abc=98, deb=0:
abc=98, deb=1:
./discord.sh --webhook-url=https://example.com/hook --text INFO: 98

【讨论】:

嗯,很酷的主意。非常感谢abc==100deb==1 时,if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]] 为真。修复后删除echo【参考方案2】:

你的意思是这样的?

 [[ $abc -lt 98 ]] && 
   ./discord.sh --webhook-url=$url --text "$([[ $deb -eq 1 ]] && echo "INFO" || echo "WARNING"): $abc"
 

将其视为if then else fi 的替代品(大括号仅在您有更多命令时才需要,但我还是喜欢使用它,以提高可读性(在某些情况下) .

基本上是这样的

[[ condition ]] && commands if true || commands if false

【讨论】:

abc==100deb==1你也想打电话给discord.sh 是的,这个对我有用:$([[ $deb -eq 1 ]] && echo 'INFO' || echo 'WARNING') 非常感谢【参考方案3】:

请你试试:

if (( abc < 98 || deb == 1 )); then
    loglevel=$( (( deb == 1 )) && echo "INFO" || echo "WARNING" )
    ./discord.sh --webhook-url=$url --text "$loglevel: $abc"
fi

【讨论】:

看起来很不错,谢谢! 出于测试目的,我忘记删除echo 命令。现已修复。 非常感谢【参考方案4】:

恕我直言,@tshiono 的答案是最好的。但是,它变得难以阅读/调试。 为什么不使用详细的解决方案? 当这两个条件都为真时,您想使用 INFO 进行日志记录。

if ((deb==1 )); then 
  ./discord.sh --webhook-url="$url" --text "INFO: $abc"
elif ((abc < 98)); then
  ./discord.sh --webhook-url="$url" --text "WARNING: $abc"
fi

【讨论】:

以上是关于bash shell 脚本:条件字符串连接的主要内容,如果未能解决你的问题,请参考以下文章

编写Shell脚本

如何将“空白”和“或”条件与 bash 脚本匹配?

shell脚本的条件测试与比较

第五课-第四讲05_04_bash脚本编程之三 条件判断及算术运算

Shell脚本编程概述:bash内置字符处理工具

在bash shell 上如何按字母顺序比较两个字符串 ?