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