带参数的脚本

时间:2015-12-06 16:25:41

标签: linux bash

我打算制作一个脚本,给出一个数字,它数到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

1 个答案:

答案 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循环。