我打算制作一个脚本,给出一个数字,它数到0,我设法做到这一点并且它正在工作:
#!/bin/bash
echo -n "type a number: "
read number; echo
while [ $number -ge 0 ]; do
echo -n "$number"
number=$((number-1))
done
echo
好吧,我改了它,因为我需要通过参数ex传递数字:" ./ script 5"它必须显示倒计时直到0,但它进入循环。我对它的所有脚本/堆栈都很新,我做错了什么?
#!/bin/bash
if [ "$*" = "" ]; then
echo
echo "not correct"
echo "must be a int number"
echo
exit
fi
while [ "$1" -ge 0 ]; do
echo "$1"
cont='expr $1-1'
done
echo
答案 0 :(得分:2)
您始终使用[ "$1" -ge 0 ]
作为条件,但实际修改/更新的值为cont
,而不是$1
。 (此外,您可以根据$1
的值进行修改,而$cont
的值不会更改,因此您只需将$1
设置为小于#!/bin/bash
[[ $1 ]] || { printf '%s\n' "First argument must be an integer" >&2; exit 1; }
for ((i=$1; i>=0; i--)); do
echo "$i"
done
的原始值。
考虑:
$1
...并注意,在各种变化中:
$*
传递的第一个参数,而不是有时将其称为$i
$cont
,此处而不是expr
)时,我们在测试中使用相同的变量,并且还作为循环中的修改源。$(( ))
进行数学计算是过时的; POSIX sh允许for
创建数学上下文,bash扩展它以允许数学上下文中的C风格this
循环。