将两个输入数字之间的所有数字写入写入文件的循环

将两个输入数字之间的所有数字写入写入文件的循环

我有一个脚本,需要两个数字,均为 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 }'

相关内容