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

时间:2015-02-16 23:29:50

标签: linux bash shell if-statement

我目前使用以下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;

2 个答案:

答案 0 :(得分:2)

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

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

当您使用bash时,您可以使用(( arithmetic contexts ))[不需要封闭。{1}}。在其中,变量名称被扩展,因此不需要使用$前缀。

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

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

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

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

答案 1 :(得分:1)

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

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