“读取”后无法识别变量

时间:2018-09-13 10:19:02

标签: solaris ksh

-编辑:已解决。查看答案。

背景: 我正在编写一个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:语法错误

我现在正在拔头发,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

对于那些感兴趣的人,我发现不可能以我使用的方式使用“阅读”。
由“读取”分配的变量值只是“永不持久”。
为了解决这个问题,我应用了不理想的解决方案,即使用标准的“读取时”格式,然后在循环内将选定的变量回显到变量文件中。
创建完上述文件后,我就“加载”了它。

(伪代码:)

LOOP START
echo "VAR_A="$VAR_A"; VAR_B="$VAR_B";" > somefile.out
LOOP END
. somefile.out