사용자에게 두 개의 정수를 프롬프트하고 읽는 Bash 쉘 스크립트 프로그램입니다.

사용자에게 두 개의 정수를 프롬프트하고 읽는 Bash 쉘 스크립트 프로그램입니다.

좋아, 나는 한동안 이 문제를 해결하려고 노력해 왔지만 좌우측에서 오류를 발견하고 있습니다. 이것은 기본을 배우려는 나의 첫 번째 시도였습니다. 따라서 어떤 조언이라도 도움이 될 것입니다!

문제: 사용자에게 두 개의 정수를 프롬프트하고 읽는 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이는 등 ashbash포함한 모든 POSIX 호환 쉘에서 작동합니다.

관련 정보