220210 및 220221과 같이 두 개의 숫자(모두 6자리)가 필요한 스크립트가 있습니다.
내가 원하는 것은 220210에서 220221 사이의 모든 숫자와 이 2개의 숫자를 파일에 쓰는 루프입니다.
나는 이것이 아마도 매우 간단하다는 것을 알고 있지만 그것은 나를 괴롭혔습니다.
HP-UX 11.23 배시
답변1
seq 명령을 사용할 수 없는 것 같아서 이것이 귀하의 bash 버전에서 작동하는지 확실하지 않지만 다음과 같은 범위에 사용해 볼 수 있습니다.
#!/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 셸에서 이 작업을 수행하려면 다음을 시도해 보세요.
#!/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
awk는 지난 30년 동안 거의 모든 배포판에 사용되었으며 이것이 기본 K&R awk입니다.
echo 220210 220221 | awk '{ for (j = $1; j <= $2; j++) print j }'