我正在尝试编写一个shell脚本,它可以做到以下这些:
接收输入
直到
提前感谢您。
接收输入
input 4
并打印出来:0000
0001
0002
直到
9999
提前感谢您。
input 4
并打印出来:0000
0001
0002
9999
你可以使用 seq
命令和 printf
格式字符串生成一个从起始值到结束值的数字序列:
width=4
start=1
stop=9999
seq -f "%0${width}g" "$start" "$stop"
0001
0002
0003
0004
...
9997
9998
9999
如果您的操作系统是极为罕见的没有包含seq
命令的(因为这不是POSIX的要求),您可以使用符合POSIX要求的awk
命令:
awk -v w="$width" -v start="$start" -v stop="$stop" 'BEGIN{
for(i=start;i<=stop;i++) printf("%0*d\n", w, i)}'
或者使用bc
代替seq
,并使用xargs
在管道中调用printf
:
echo "for (i = $start; i <= $stop; i+=1) i" | bc -l | xargs printf "%0${width}d\n"
for (( i=${start}; i<=${stop}; i++ )); do
printf "%0*d\n" "$width" "$i"
done
cnt="$start"
while [ "$cnt" -le "$stop" ]; do
printf "%0*d\n" "$width" "$cnt"
let cnt++
done
在这里,你的超能力是使用正确格式的 printf
。
for
循环来遍历所需范围。printf
格式化要打印的数字位数。你的问题的解决方案是
#!/bin/bash
read -p "Enter the number of digits: " num_digits
START=0
STOP=9999
for((i=${START};i<=${STOP};i++))
do
printf '%0'${num_digits}'d\n' $i
done
保存此文件并执行。当提示输入数字位数时,请输入您想要格式化输出的数字位数。
printf "%0${num_digits}d\n"
或许更好?此外,在Bash或shell脚本中,使用大写变量是为了表示系统和环境约定俗成的。 - dawg