0 또는 양의 정수 테스트

0 또는 양의 정수 테스트

bash스크립트의 숫자가 0(0)인지 양의 정수 인지 테스트하는 방법은 무엇입니까 ?

답변1

일반적인 관용구는 변수의 값이 숫자로만 구성되어 있는지 확인하는 것입니다. 최신 bash 쉘의 경우 =~정규식을 사용할 수 있습니다 .

zero_or_positive_integer(){
    for i in "$@"; do
        if [[ "$i" =~ ^[0-9]+$ ]]; then
            echo "YES $i is either 0 or a positive integer"
        else
            echo "NO $i is neither 0 nor a positive integer"
        fi
    done
}

결과 :

$ zero_or_positive_integer foo -2 1.5 0 12
NO foo is neither 0 nor a positive integer
NO -2 is neither 0 nor a positive integer
NO 1.5 is neither 0 nor a positive integer
YES 0 is either 0 or a positive integer
YES 12 is either 0 or a positive integer

답변2

테스트하려면 일반적으로 [or [[연산자가 사용됩니다. [명령의 동의어입니다 test(Bash의 일부가 아님).

$ help [
[: [ arg... ]
    Evaluate conditional expression.
    
    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.
$ man test
[...]
       INTEGER1 -eq INTEGER2
              INTEGER1 is equal to INTEGER2
       INTEGER1 -ge INTEGER2
              INTEGER1 is greater than or equal to INTEGER2
[...]

따라서 작성할 수 있는 것처럼 보입니다(공백을 잊지 마십시오. [단지 내장된 것이므로 인수를 분리하십시오).

if [ "$var" -eq 0 ]; then
  echo "Zero"
elif [ "$var" -gt 0 ]; then
  echo "Positive"
fi

$var정수가 아닌 경우 오류가 발생한다는 점에 유의하세요 . 우리는 $var그것이 이미 정수라고 가정합니다.

$var이것이 정수인지 확실하지 않다면 이것이 좋은 테스트인지 확신할 수 없으므로 정규 표현식을 사용하는 코드는 다음과 같습니다.

if [[ "$var" =~ ^[1-9][0-9]+$ ]]; then
  echo "Positive"
elif [[ "$var" = 0 ]]; then
  echo "Zero"
else
  echo "Other"
fi

답변3

Bash printf내장 함수는 문자열을 읽고 형식 문자열에 지정된 대로 성공적으로 변환될 수 있는지 확인합니다. "${?}"의 상태를 확인하고 를 -v사용하여 임시 변수에 값을 입력하고 을 사용하여 오류 메시지를 삭제할 수 있습니다 2>/dev/null.

$ a=-56
$ printf -v q '%d' "${a}"; echo $? "${q}"
0 -56
$ a=-56.3
$ printf -v q '%d' "${a}"; echo $? "${q}"
bash: printf: -56.3: invalid number
1 -56
$ a=315.8e4
$ printf -v q '%d' "${a}"; echo $? "${q}"
bash: printf: 315.8e4: invalid number
1 315
$ printf -v q '%f' "${a}"; echo $? "${q}"
0 3158000.000000

관련 정보