以下檢查不工作:EXPR非數字的參數shell腳本
if [ $LEN = `expr $CNPROC + $CTotal` ])
,並返回expr non-numeric argument shell script
。
總是這樣。請告訴我什麼是錯誤。
早些時候,我沒有使用,所以同樣的事情正常工作,現在突然間,當我把它放在while循環中,它沒有工作。
#!/usr/bin/ksh
echo "`${BOLD}` ***** Checking Memory Utilization User*****`${UNBOLD}`"
echo "==================================================="
IFS='|'
cat configMachineDetails.txt | grep -v "^#" | while read MachineType UserName MachineName
do
export MEMORY_USAGE1=`ssh -f -T ${UserName}@${MachineName} prstat -t -s rss 1 2 | tr '%' ' '| awk '$5>5.0'`
export LEN=`echo "$MEMORY_USAGE1"|wc -l`
export CNPROC=`echo "$MEMORY_USAGE1"|grep "NPROC"|wc -l`
export CTotal=`echo "$MEMORY_USAGE1"|grep "Total"|wc -l`
if [ $LEN = `expr $CNPROC + $CTotal` ]
then
echo "`${BOLD}`**************All usages are normal !!!!!! *************`${UNBOLD}`"
else
echo "`${BOLD}`**** Memory(%) is more than 5% in MachineType $MachineType UserName $UserName
MachineName $MachineName *******`${UNBOLD}`"
echo "===================================================="
echo "$MEMORY_USAGE1"
fi
done
無用的'cat':'grep -v「^#」configMachineDetails.txt |而...'。另外,您不太可能需要導出任何這些變量。 – 2010-05-03 12:57:41
我喜歡改變解釋decl來添加'-x'和/或'-v'選項:'#!/ usr/bin/ksh -xv'。這會打印很多東西,但它可以幫助我追蹤shell正在做的替換。嘗試一下,然後用相關線路上的輸出線更新你的問題。 – 2010-05-03 13:03:08
另外,請注意,雖然ksh將使用管道進入'while'並將變量保留爲其新值,但其他shell(如Bash)會創建一個子shell,並且新值將丟失。在Bash中,'a = 1;回聲「嗨」|同時閱讀b;做echo $ b; A = 2;完成; echo $ a'打印「hi」和「1」。這將產生預期的「2」:'a = 1;同時閱讀b;做echo $ b; A = 2;完成<<回聲「嗨」);回聲$ A' – 2010-05-03 13:05:15