읽기 명령에 for 루프 사용

읽기 명령에 for 루프 사용
#!/bin/bash
echo -n "Enter a number >"
read number
for var in $number
do
  read number
  echo $var
done
echo "Go!"

8-1의 숫자를 세로로 인쇄하고 끝에 "go"라고 말하고 싶습니다. 코드 8을 실행하면 Go!가 인쇄합니다.

답변1

사용 seq:

#!/bin/bash
echo -n "Enter a number > "
read number
seq "$number" -1 1
echo "Go!"

산출:

Enter a number > 8
8
7
6
5
4
3
2
1
Go!

코드를 약간 개선하려면 프롬프트를 다음으로 출력할 수 있습니다 stderr.

>&2 echo -n "Enter a number > "

또는 -p다음 옵션을 사용하십시오 read.

read -p 'enter a number > ' number

답변2

코드가 예상대로 작동하지 않는 이유는 다음과 같습니다.

  1. 루프의 각 반복에 대한 숫자를 읽고
  2. 루프에서 숫자를 감소/증가시키지 마십시오 while.
  3. for루프 반복에 대해 올바른 범위가 생성되지 않습니다.

에서는 zsh다음을 수행할 수 있습니다.

read '?Enter a number > '
printf '%s\n' {1..$REPLY} 'Go!'

이는 사용자로부터 데이터를 읽은 REPLY다음 숫자 목록을 생성하는 중괄호 확장에서 해당 데이터를 사용합니다(사용자가 유효한 숫자를 입력한 경우). 목록 끝에 문자열을 추가한 Go!다음 개행 문자를 구분 기호로 사용하여 모든 문자열을 인쇄합니다 printf.

답변3

넌 할 수있어:

#!/bin/bash
echo -n "Enter a number: "
read number
for ((i=number; i>0; i--))
do
  echo $i
done
echo "Go!"

또는:

echo -n "Enter a number: "
read number
while ((number>0))
do
  echo $number
  let number--
done
echo "Go!"

관련 정보