Shell脚本整数输入

4

我在使用脚本时遇到了问题。我的目标是,根据运行时输入的整数值,迭代执行文件转换并分割一定次数,最后完成操作。但我预见到一个问题,就是在脚本的 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个回答

6

您可以在像bash这样的shell中操纵字符串,就像它们是整数一样。

如果您想在对其进行任何操作之前确保它是一个整数,您可以使用正则表达式来实现,例如:

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 shell,则可以调用外部程序(如grep)并检查其返回代码。 请记住,如果您正在使用类似[[的内容将它们与其他值进行比较,请使用-eq-ne-lt及其同类而不是==!=。 前者是数字比较,后者是字符串比较。有关更详细信息,请参阅bash手册。

所以澄清一下,我不需要将字符串转换为整数,对吗?我的程序需要获取xy坐标并执行一些算术运算。XMAX和YMAX值是为了确保程序不超过这些值。因此,如果我放置while循环并比较2个值,它应该按预期工作,对吗? - Taylor Broad
@Taylor:是的,不过记得要使用数字比较运算符。我已经将其添加到答案的末尾。而且,虽然你不需要将它们转换,但检查它们仍然是一个好主意。 - paxdiablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接