Bash 脚本接受一个数字,然后打印一组从 0 到输入的数字的 int



我正在尝试编写一个bash脚本,该脚本接受来自键盘的数字,然后打印一组从0到输入的数字的整数。我根本不知道该怎么做。这是我的代码:

while [ 1 ]
do
    echo -n "Enter a color: "
    read user_answer
    for (( $user_answer = $user_answer; $user_answer>0; $user_answer--))
            echo $user_answer
    fi
done
exit

我收到的错误是:number_loop:第 10 行:意外标记附近的语法错误 echo' number_loop: line 10:回显 $user_answer'

分配一个单独的变量以使用递增/递减运算符。 $user_answer=$user_answer将始终为 true,并且在尝试使用递减时会抛出错误。尝试以下操作:

#!/bin/bash
while [ 1 ]
 do
  echo -n "Enter a color: "
  read user_answer
  for (( i=$user_answer; i>0; i-- ))
   do
      echo $i
  done
done
exit

您错过了forecho之间的do语句。

bash有很多写数字的选项。您似乎要做的是最简单的seq

seq $user_answer -1 0

如果你想使用你的循环,你必须插入一个; do并将fi替换为done,并替换几个$user_answer

for (( i = $user_answer; i>0; i--)); do
        echo $i
done

(顺便说一句:我假设你想以相反的顺序写数字,因为你在循环中倒退。使用seq转发更加容易:

seq 0 $user_input

这是 c 样式循环特别好用的地方:

#!/bin/bash
for ((i = 1; i <= $1; i++)); do
    printf "%sn" "$i"
done
exit 0

$ bash simplefor.sh 10
1
2
3
4
5
6
7
8
9
10

注意:<=用作 for 循环测试,因此它10迭代1-10而不是0-9

在您的特定情况下,从您想要的$user_answer进行迭代:

for (( i = $user_answer; i > 0; i--)); do
        echo $i
done

for 循环是一个 bash 内部命令,因此它不会分叉新进程。

seq 命令有一个很好的单行语法。

若要充分利用两者,可以使用 { .. } 语法:

eval echo {1..$answer}

最新更新