如何在 Bash Shell 脚本中的 while 语句中编写 if 语句?

How do I write an if statement within a while statement in Bash Shell Script?

我目前在使用以下 bash shell 脚本时遇到简单的语法问题。我不确定将 if 语句嵌套到 while 语句中的语法是什么,或者是否可以使用 bash shell 脚本编写(linux 的新内容):

#!/bin/bash

myCombo=$((RANDOM%99999+10000));
echo ${myCombo};

myCracker=00000;

while [ (($myCracker<=99999)) ]; do
    if [ $myCracker -eq myCombo ]
    then
        echo "The combination is " ${myCracker} " !"
    else [ $myCracker = $myCracker + 1 ]
    fi
done;

你的循环有很多问题。我在下面做了一些改进:

while (( myCracker <= 99999 )); do
    if (( myCracker == myCombo )); then
        echo "The combination is $myCracker !"
        break
    else
        (( ++myCracker ))
    fi
done

当您使用 bash 时,您可以使用 (( arithmetic contexts )),它不需要包含在 [ 中。在它们中,变量名被扩展,所以不需要前缀 $.

请注意,您的原始逻辑将无限期循环或永不循环 echo,这可能是一个错误。如果 myCracker == myCombo 永远为真,则 myCracker 不会递增,因此循环永远不会终止。 break 语句处理此问题。

我故意留下 else 分支以显示语法,但您也可以完全删除它:

while (( myCracker++ <= 99999 )); do
    if (( myCracker == myCombo )); then
        echo "The combination is $myCracker !"
        break
    fi
done

break 仍然有用,因为它可以防止循环不必要地继续。

如果您进行简单比较,也可以使用扩展测试而不是算术上下文。它们应该快一点,而且更常见。

while [[ $myCracker -le 99999 ]]; do
    if [[ $myCracker -eq $myCombo ]]; then
        echo "The combination is ${myCracker}!"
        break
    else
        ((myCracker++))
    fi
done