好吧,我已经尝试解决这个问题有一段时间了,但我发现了左右错误。这是我第一次尝试学习基础知识。所以任何建议都会有帮助!
问题:我正在尝试编写一个 Bash shell 脚本程序,提示并读取用户的两个整数。假定第二个参数大于第一个参数。程序的输出是从第一个数字开始到第二个数字结束的数字计数。
换句话说,输出将如下所示:
Please enter the first number:
3
Please enter the second number, larger than the first:
6
3
4
5
6
好了,这就是我目前掌握的情况了~
read -p "Please Enter the first number : " n1
echo "$n1"
read -p "Please Enter the second number, larger than the first : " n2
echo "$n2"
FIRSTV=0
SECONDV=1
if [ 1 -gt 0]
then
count=$((FIRSTV-SECONDV))
echo $COUNT
fi
答案1
如果你可以使用seq
,你可以这样做:
read -p "Please Enter the first number : " n1
echo "$n1"
read -p "Please Enter the second number, larger than the first : " n2
echo "$n2"
seq "$n1" "$n2"
如果您必须完全在 shell 中执行此操作并且可以使用现代 shell,如bash
、ksh
等zsh
(但不能使用ash
或dash
或类似的严格 POSIX shell),则可以将seq
命令替换为:
eval "printf '%s\n' {$n1..$n2}"
您需要使用eval
第二个版本,因为 bash/ksh/etc 序列期望像 那样的实际整数{1..5}
,而不是像 那样的变量{$n1..$n2}
。 eval
扩展变量,以便在{...}
序列内使用它们的实际值。
如果您想使用循环来执行此操作并且没有花哨的 bash/ksh/etc 功能,您可以将seq
或eval
行替换为以下内容:
c="$n1"
while [ "$c" -le "$n2" ] ; do
echo "$c"
c=$((c+1))
done
这适用于任何 POSIX 兼容的 shell,包括dash
和ash
等bash
。