사용자가 입력한 문구를 사용자가 입력한 특정 횟수만큼 반복해 보세요. 예상했던 잘못된 정수 표현식이 계속 나오며 이를 수정하는 방법을 모르겠습니다.
#!/bin/sh
echo "What do you want to say?"
read phrase
echo "How many times?"
read num
while [ "num" -ge 0 ]
do
echo $phrase
num='expr num - 1'
done
답변1
$
에 있지 않는 한 bash에서 변수를 확장하려면 a를 사용해야 합니다 (( ))
. 리터럴 문자열 "num"을 숫자 0과 비교합니다. 다음 옵션 중 하나를 사용하십시오.
while [ "$num" -ge 0 ] # POSIX
while (( num >= 0 )); # bash
답변2
일부 수정.
#!/bin/sh
echo "What do you want to say?"
read phrase
echo "How many times?"
read num
while [ $num -gt 0 ];
do
echo $phrase
let num='num - 1'
done
예
$ ./cmd.bash
What do you want to say?
hi
How many times?
4
hi
hi
hi
hi
이 표기법을 사용하면 재계산을 $num
더 간단하고 쉽게 읽을 수 있습니다.
다음 줄을 변경하세요.
let num='num - 1'
이것으로:
( num-- ))
변수 표기법을 언제 사용해야 하는지 $
, 사용하지 말아야 하는지 혼란스러울 수 있으며, 일반적으로 맨 페이지를 참조 bash
하고 test
이러한 종류의 작업을 수행해야 하는 경우가 있습니다. 이 변경 사항은 bash
네이티브 이상의 기능을 사용하는 경우 sh
적합합니다 .
세부 사항
$num
루프 제어 섹션에서 범위 검사를 수행할 때 변수 형식을 사용해야 합니다while
.let
대신 사용하십시오expr
.- 루프의 경계에는 0개의 단계가 포함되어 있어
-ge
원하는 것보다 1개의 더 많은 결과를 제공합니다.
예
while
루프 바인딩 검사를 사용 하면 -gt
다음과 같은 결과를 얻을 수 있습니다.
$ ./cmd.bash
What do you want to say?
hi
How many times?
2
hi
1
hi
0
당신이 당신의 것을 사용한다면, -ge
당신은 다음과 같은 행동을하게 될 것입니다 :
$ ./cmd.bash
What do you want to say?
hi
How many times?
2
hi
1
hi
0
hi
-1