gpt4 book ai didi

linux - 带参数的脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:28:08 24 4
gpt4 key购买 nike

我应该制作一个脚本,给它计数为 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" -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 允许 $(( ))创建一个数学上下文,bash 将其扩展为也允许 C 风格 for在数学上下文中循环。

关于linux - 带参数的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com