Bash 스크립트에 대한 입력 인수가 기본 10 숫자인지 어떻게 확인합니까? [폐쇄]

Bash 스크립트에 대한 입력 인수가 기본 10 숫자인지 어떻게 확인합니까? [폐쇄]

Bash 스크립트의 입력 매개변수가 10진수인지 확인해야 합니다. 어떡해?

답변1

패턴 일치를 사용할 수 있습니다(선행 0을 허용하지 않으려면 정규식을 개선하세요).

if [[ $num =~ ^[+-]?[1-9][0-9]*$ ]]
then
echo Decimal
else
echo Not decimal
fi

답변2

십진수 해석을 강제하면서 자신과 비교합니다. 쉘 산술 매뉴얼에서 볼 수 있듯이:

0으로 시작하는 상수는 8진수로 해석됩니다. 앞에 "0x" 또는 "0X"가 있으면 16진수를 나타냅니다. 그렇지 않으면 숫자는 다음과 같은 형식을 취합니다. [베이스#]n, 여기서 선택적 기수는 산술 기수를 나타내는 2에서 64 사이의 십진수이고 n은 해당 기수의 숫자입니다. base#을 생략하면 base 10이 사용됩니다. n을 지정한 경우 9보다 큰 숫자는 소문자, 대문자, "@", "_" 순으로 표시됩니다. 밑수가 36보다 작거나 같은 경우 소문자와 대문자를 서로 바꿔서 사용하여 10에서 35 사이의 숫자를 나타낼 수 있습니다.

그래서 이것이 당신이 할 수 있는 첫 번째 주장이라면...

부정적인 입력을 수용하기 위해 다시 편집됨

#!/bin/bash
b=${1#-}
if [[ $b =~ ^[0-9]+$ ]]; then                       #If it's all numbers
        a=$((10#$b))                                #create a base 10 version
        if [ "$a" == "$b" ]; then                   #if they LOOK the same...
                echo "$b is Base 10!"; exit 1; fi;  #It's base 10; exit.
fi
    echo "$b is not base 10"                        #If it has letters or $a and $b look different, it's not base 10.

이 코드는 모든 입력을 받아들이고 그것이 기본 10인지 여부를 알려줍니다. arg는 먼저 음수 기호를 제거한 다음 012 -eq $((10#012)); 때문에 숫자가 아닌 $a와 비교합니다. 그러나 우리는 그것이 소수가 아니기 때문에 스크립트가 우리에게 알려주는 것을 원하지 않습니다.

root@xxxx:~# ./testing.sh -124124
124124 is Base 10!
root@xxxx:~# ./testing.sh 58135
58135 is Base 10!
root@xxxx:~# ./testing.sh aksjflkfj929148
aksjflkfj929148 is not Base 10

관련 정보