Shell 需要整数表达式
代码示例:Shell 需要整数表达式,shell,unix,Shell,Unix,代码示例: declare -i a=1 echo "The number of NMON instances running in Performance VM" ps -ef | grep nmon | awk '{ print $2 }' | wc -l echo "---------------------------------------------" num2= ps -ef | grep nmon | awk '{ print $2 }' | wc -l #num1=${num2
declare -i a=1
echo "The number of NMON instances running in Performance VM"
ps -ef | grep nmon | awk '{ print $2 }' | wc -l
echo "---------------------------------------------"
num2= ps -ef | grep nmon | awk '{ print $2 }' | wc -l
#num1=${num2%%.*}
#num2 = $(ps -ef | grep nmon | awk '{ print $2 }' | wc -l)
echo "---------------------------------------------"
echo "${num2}"
while [ "$a" -lt "$num2" ]
do
kill -USR2 $(ps -ef | grep nmon | awk '{ print $2 }' | head -1)
a=`expr $a + 1`
done
在输出中,我得到以下错误
[::应为整数表达式
在调试中,它显示
++“['1-lt']”
num2为空,但当我回显num2值时,我得到的值是正确的
输出:
在Performance VM中运行的NMON实例数
1.
1.
提前感谢在bash中,空格很重要 命令执行的语法为:
command arg1 arg2 ...
所以
这条规则有两个例外
- 将变量导出到已执行的命令(命令完成后变量消失):
var1=value1 var2=value2..命令arg1 arg2…
- 分配变量(您需要此变量):
var=value
echo“${num2}”
。就像诊断已经告诉您的那样,此变量为空
shell脚本的一般语法是
[ variable=value ...] command parameters ...
它将在命令
期间将值
分配给变量
,然后恢复其原始值。因此,您正在运行的管道临时将num2
设置为空字符串(显然它已经包含),然后运行管道而不将输出存储在任何位置(例如,我想您预期的,num2
)
这里是您的脚本的固定版本,还有一个附加更改,即Awk脚本处理您使用的grep
和head
和wc
的内容。由于这些命令的功能在Awk中很容易被替换,因此使用外部实用程序是值得怀疑的(尤其是对于grep
,当您只是将它作为一个简单的Awk脚本的预处理器运行时)
重复的代码可以进一步重构以避免所有代码重复,但这会在某种程度上妨碍这个简单脚本的可读性,所以我没有这样做。
num2=ps-ef | grep nmon | awk'{print$2}wc-l
应该是num2=$(ps-ef | awk'/nmon/{print$2}wc l)
“…但当我回显num2值时,我得到的值是正确的。"不,你没有。投票结束。如果你不听好的建议,我们也帮不了你。num2=
这是无效的语法。从技术上讲,这是有效的,但我确信你没有一个名为num2=
@KarolyHorvath的应用程序。它完全有效,只是没有达到OP的预期。它为变量num2
分配了一个空字符串对于管道的持续时间。只是好奇,异常在什么方面是“异常”?即使在这些情况下,空白似乎也很重要。
[ variable=value ...] command parameters ...
countnmon () {
ps -ef | awk '/[n]mon/ { ++n } END { print n }'
}
declare -i a=1
echo "The number of NMON instances running in Performance VM"
countnmon
echo "---------------------------------------------"
num2=$(countnmon)
#num1=${num2%%.*}
#num2 = $(countnmon)
echo "---------------------------------------------"
echo "${num2}"
while [ "$a" -lt "$num2" ]
do
kill -USR2 $(ps -ef | awk '/[n]mon/ { print $2; exit }')
a=`expr $a + 1`
done