Bash 예상 정수 표현식

Bash 예상 정수 표현식

사용자가 입력한 문구를 사용자가 입력한 특정 횟수만큼 반복해 보세요. 예상했던 잘못된 정수 표현식이 계속 나오며 이를 수정하는 방법을 모르겠습니다.

#!/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적합합니다 .

세부 사항

  1. $num루프 제어 섹션에서 범위 검사를 수행할 때 변수 형식을 사용해야 합니다 while.
  2. let대신 사용하십시오 expr.
  3. 루프의 경계에는 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

관련 정보