我有一个脚本,需要两个数字,均为 6 位数字,例如 220210 和 220221。
我想要的只是一个循环,将 220210 和 220221 之间的所有数字以及这 2 个数字写入文件中。
我知道这可能非常简单,但它一直在困扰着我。
HP-UX 11.23 bash
答案1
不确定这是否适用于您的 bash 版本,因为 seq 命令似乎不可用,但您可以尝试使用 for range 像
#!/bin/bash
for n in {220210..220221}
do
echo $n >> numberfile.txt
done
答案2
您可以使用桌面计算器dc
实用程序来完成此操作。以任意顺序加载两个范围编号。只需记住将负数的符号更改为下划线而不是破折号。例如,-32 将作为 _32 输入。
dc <<EOF
220201 220210
[larsa]sb
[lap1+sadla<+]s+
sadla>bla
sal+xp
EOF
结果:
220201
220202
220203
220204
220205
220206
220207
220208
220209
220210
另一种方法是使用bc
二进制计算器实用程序。如您所见,以任意顺序加载数字,如果需要,bc 会翻转它们,并开始以 1 为步长从小到大循环。
echo "a=7;b=0;if(a>b){t=a;a=b;b=t;};for(i=a; i<=b; i++) {i;}" | bc
答案3
执行此操作的正确方法是使用seq
或支撑扩展,如其他答案所示。如果由于某种原因您不能并且需要要在简单的 POSIX shell 中执行此操作,您可以尝试:
#!/bin/sh
i=$1;
while [ $i -le $2 ]; do
echo "$i"
i=$((i+1))
done
稍微更现代(但可移植性较差,非 POSIX)的语法是:
#!/bin/bash
for((i=$1;i<=$2;i++)); do
echo "$i"
done
答案4
过去 30 年来,awk 几乎出现在每个发行版中,这是基本的 K&R awk。
echo 220210 220221 | awk '{ for (j = $1; j <= $2; j++) print j }'