-编辑:已解决。查看答案。
背景: 我正在编写一个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:语法错误
我现在正在拔头发,任何帮助将不胜感激。
答案 0 :(得分:-1)
对于那些感兴趣的人,我发现不可能以我使用的方式使用“阅读”。
由“读取”分配的变量值只是“永不持久”。
为了解决这个问题,我应用了不理想的解决方案,即使用标准的“读取时”格式,然后在循环内将选定的变量回显到变量文件中。
创建完上述文件后,我就“加载”了它。
(伪代码:)
LOOP START
echo "VAR_A="$VAR_A"; VAR_B="$VAR_B";" > somefile.out
LOOP END
. somefile.out