【发布时间】:2018-09-13 10:19:02
【问题描述】:
-- 编辑:已解决。查看答案。
背景: 我正在编写一个 shell,当有人调整数据库大小时,它将在我们的系统上执行一些额外的操作。 shell 是用 ksh 编写的(要求),操作系统是 Solaris 5.10 。 问题在于其中一项检查,它验证底层操作系统上有足够的可用空间。
问题: 检查读取根的 df -k 行,这是我在此步骤中检查的内容,并将其打印到文件中。然后我将内容“读取”到我在计算中使用的变量中。 不幸的是,当我尝试对其中一个变量进行算术运算时,我收到一个错误,表明它为空。我在该行之后放置了一个调试输出行,验证它是否为空......它失去了它的价值......
我已经尝试了所有可以在网上找到的方法,当我手动运行它们时它们可以工作,但不能在 shell 文件中。 (* 该文件确实有#!/usr/bin/ksh)
代码:
df -k | grep "rpool/ROOT" > dftest.out
RPOOL_NAME=""; declare -i TOTAL_SIZE=0; USED_SPACE=0; AVAILABLE_SPACE=0; AVAILABLE_PERCENT=0; RSIGN=""
read RPOOL_NAME TOTAL_SIZE USED_SPACE AVAILABLE_SPACE AVAILABLE_PERCENT RSIGN < dftest.out
\rm dftest.out
echo $RPOOL_NAME $TOTAL_SIZE $USED_SPACE $AVAILABLE_SPACE $AVAILABLE_PERCENT $RSIGN
((TOTAL_SIZE=$TOTAL_SIZE/1024))
这是结果:
DBResize.sh[11]: TOTAL_SIZE=/1024: 语法错误
我在这一点上拉头发,任何帮助将不胜感激。
【问题讨论】:
-
你不必将
$添加到(())构造来进行数学运算,所以它应该是TOTAL_SIZE=$(($TOTAL_SIZE/1024))? -
@AndrewHenle 两者都是变量赋值和算术运算的有效方式。
-
你能看一下
dftest.out的内容吗?您可以通过删除带有declare -i、set -x或echo "test 8 2 6 75% =" > dftest.out的行来开始调试。