我正在尝试编写一个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
您错过了for
和echo
之间的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}