2015-01-16 2 views
0

내 스크립트에 문제가 있습니다. 내가하고 싶은 것은 런타임에 스크립트에 입력 된 정수 값에 달려있다. 완료하기 전에 파일 변환을 반복하여 반복 할 것이다. 내가 예상하는 한 가지 문제는 스크립트의 while 루프 부분을 실행할 때 정수 대신 문자열을 비교한다는 것입니다. 다음은 코드의 일부입니다.쉘 스크립트 정수 입력

GTF="$1" 
SP=$(dirname "$SCRIPT") 

echo "Welcome to this script, Please do me a favor and enter the dimensions of the original Geographical Tiff file so I do not crash myself!!" 

# Read the x axis max and y axis max so we do not have any errors. 

echo "X axis -> " 
read XMAX 
echo "Y axis -> " 
read YMAX 

XMAX 및 YMAX 값은 의도 한대로 작동하려면 스크립트에서 정수 여야합니다. 누구나 해결책이 있습니까?

감사합니다.

답변

1

bash과 같이 셸에서 문자열을 조작 할 수 있습니다 (예 :). 당신은에서와 같이,이 작업을 수행하는 정규 표현식을 사용할 수 있습니다 당신은 당신이 그것으로 아무것도 할 전에 정수의을 보장 하려면

는 :

수를 보장합니다
echo -n "ENTER value: " 
read xyzzy 
if [[ ! $xyzzy =~ ^[0-9]+$ ]] ; then 
    echo "No good" 
    exit 
fi 
((xyzzy = xyzzy + 1)) 
echo "Adding one gives" $xyzzy 

에는 숫자로 구성 (당신은뿐만 아니라 음의 정수를 허용하려면 ^-?[0-9]+$ 사용) :

pax$ testprog.sh 
ENTER value: 5 
Adding one gives 6 

pax$ testprog.sh 
ENTER value: x 
No good 

pax$ testprog.sh 
ENTER value: x55y 
No good 

당신이 정규식 평등을 지원하지 않는 비 bash 쉘을 사용하는 경우, 당신은 extrnal 음식물을 호출 할 수 있습니다 ram을 grep과 같은 코드로 반환 코드를 확인하십시오. 당신이 다른 값에 대해 그들을 비교 -eq, -ne, -lt과 그들의 형제보다는 == 또는 !=를 사용하는 [[ 같은 것을 사용하는 경우

그냥 그 기억.

후자의 그룹은 문자열 비교이며, 이전 수치 그룹입니다. bash 매뉴얼 페이지에서 자세히 다룹니다.

+0

명확히하기 위해 문자열을 정수로 변환하지 않아도됩니까? 내 프로그램은 xy 좌표를 가져와 산술 연산을 수행해야합니다. XMAX 및 YMAX 값은 프로그램이이 값을 초과하지 않도록합니다. while 루프를 넣고 2 개의 값을 비교하면 의도 한대로 올바르게 작동합니까? –

+0

@Taylor : 예, 숫자 비교 연산자를 사용해야합니다. 나는 대답의 끝에 그것을 추가했다. 그리고 당신이 그들을 변환 할 필요는 없지만, 그것들을 체크하는 것은 여전히 ​​좋은 생각 일 수 있습니다. – paxdiablo