【问题标题】:How to build a conditional while statement in Bash?如何在 Bash 中构建条件 while 语句?
【发布时间】:2019-01-14 13:00:02
【问题描述】:

你好 Stackoverflow 社区,

为了使我的代码尽可能少“复制粘贴”,我正在尝试提出一种更智能的方法来使其更紧凑。

有没有什么方法可以在你的脚本中创建一个“条件 while”语句(如果这甚至是一件事),而不必再次重复所有内容?基本上,我有相同的核心函数,但是根据变量是否存在,应该触发不同的 while 语句。

在下面查看我的原始脚本:

messenger() {
msg1=$1
count=0
echo " "
while [[ $count -ne ${#1} ]]
do
    echo -n "*"
    ((count += 1))
done
echo -e "\n$1"
while [[ $count -ne 0 ]]
do
    echo -n "*"
    ((count -= 1))
done
echo -e "\n"
}

这是我的核心功能,但不是计算 $1 的长度,我希望计数等于提供的变量 $val 的可能性,但前提是它提供了。

我想要实现的 - 但由于语法原因无法实现:

messenger() {
msg1=$1
val=$2
count=0
echo " "
if [[ -z $val ]]
then
   while [[ $count -ne ${#1} ]]
else
   while [[ $count -ne $val ]]
fi
do
    echo -n "*"
    ((count += 1))
done
echo -e "\n$1"
while [[ $count -ne 0 ]]
do
    echo -n "*"
    ((count -= 1))
done
echo -e "\n"
}

我设法实现的唯一方法是重用大部分核心,基本上是复制粘贴操作。我想提出一个更好的方法来实现这一点:

messenger() {
msg1=$1
val=$2
count=0
echo " "
if [[ -z $val ]]
  then
        while [[ $count -ne ${#1} ]]
        do
            echo -n "*"
            ((count += 1))
        done
        echo -e "\n$1"
        while [[ $count -ne 0 ]]
        do
            echo -n "*"
            ((count -= 1))
        done
        echo -e "\n"
else
        while [[ $count -ne $val ]]
        do
            echo -n "*"
            ((count += 1))
        done
        echo -e "\n$1"
        while [[ $count -ne 0 ]]
        do
            echo -n "*"
            ((count -= 1))
        done
        echo -e "\n"
fi
}

我相信这个例子完美地总结了我想要实现的目标。如果您能给我指明一个方向,我将不胜感激。

$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

提前谢谢你,

伊万

【问题讨论】:

    标签: linux bash if-statement while-loop


    【解决方案1】:

    使用默认值运算符。

    while [[ $count -ne ${val:-${#1}} ]]
    

    如果val 不为空,您将使用该值。否则,它将使用${#1}

    【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2011-10-23
    • 2012-06-10
    • 2019-11-07
    • 2014-01-21
    相关资源
    最近更新 更多