좋아, 나는 한동안 이 문제를 해결하려고 노력해 왔지만 좌우측에서 오류를 발견하고 있습니다. 이것은 기본을 배우려는 나의 첫 번째 시도였습니다. 따라서 어떤 조언이라도 도움이 될 것입니다!
문제: 사용자에게 두 개의 정수를 프롬프트하고 읽는 Bash 쉘 스크립트를 작성하려고 합니다. 두 번째 매개변수가 첫 번째 매개변수보다 크다고 가정합니다. 프로그램의 출력은 첫 번째 숫자부터 시작하여 두 번째 숫자로 끝나는 숫자의 개수입니다.
즉, 출력은 다음과 같습니다.
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"
이 작업을 모두 셸에서 수행해야 하고 , bash
등과 ksh
같은 최신 셸을 사용할 수 있는 경우 zsh
(그러나 ash
, 또는 dash
등과 같은 엄격한 POSIX 셸은 아님) seq
명령을 다음으로 바꿀 수 있습니다.
eval "printf '%s\n' {$n1..$n2}"
bash/ksh/etc 시퀀스는 그러한 변수가 아닌 eval
실제 정수를 기대하기 때문에 두 번째 버전을 사용해야 합니다 . 실제 값이 시퀀스 내에서 사용 되도록 변수를 확장합니다 .{1..5}
{$n1..$n2}
eval
{...}
루프를 사용하여 이 작업을 수행하고 싶지만 멋진 bash/ksh/etc 기능이 없는 경우 seq
또는 eval
줄을 다음으로 바꿀 수 있습니다.
c="$n1"
while [ "$c" -le "$n2" ] ; do
echo "$c"
c=$((c+1))
done
dash
이는 등 ash
을 bash
포함한 모든 POSIX 호환 쉘에서 작동합니다.