2015-01-16 157 views
0

我遇到了腳本問題。我想要做的是取決於在運行時輸入到腳本中的整數值,它會在完成之前迭代文件轉換分割一定次數。我預見到的一個問題是,當通過腳本的while循環部分運行時,我將比較字符串而不是整數。這是一些代碼。Shell腳本整數輸入

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

您可以在shell中操作字符串,例如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 PROG ram喜歡grep並檢查其返回碼。

只要記住,如果你使用像[[東西比較他們與其他值,使用-eq-ne-lt和他的弟兄,而不是==!=

後一組是字符串比較,前者是數字的。 bash手冊頁更深入地介紹了這一點。

+0

所以爲了澄清,我不需要將字符串轉換爲整數正確嗎?我的程序需要採用xy座標並進行一些算術運算。 XMAX和YMAX值確保程序不會超出這些值。 因此,如果我把while循環和比較2值,它應該按預期正確工作? –

+0

@泰勒:是的,但請記住使用數字比較運算符。我已經將其添加到答案的末尾。而且,儘管你不需要對它們進行轉換,但對它們進行檢查仍然是一個好主意。 – paxdiablo