如何在 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
我目前在使用以下 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