shell脚本命令错误
shell script command error
我尝试执行下面的 CPU 监控脚本,但脚本抛出错误。但是直接执行 top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g'
不会抛出错误。有人可以帮忙吗??
if (top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g') -gt 1 ; then
echo ('CPU percentage is $CPU_PER, which is higher than 50%. Kindly login to server and validate the process.')
else
echo ('Executing Else statement.')
fi
我不确定 shell 您使用的是什么,但如果您使用 Bash,命令将如下所示:
#!/bin/bash
# ... code ...
op=$(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
if [ "y" = "$(echo | awk "($op > 1) { print \"y\"; }")" ]; then
echo 'CPU Percentage is grater Which is Highere than 50% Kindly Login to server and validate the process'
else
echo 'Excuting Else statement '
fi
此外,由于 $(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
并不总是 return 整数,因此正常的 -gt
不起作用。这就是我在此示例中使用 awk
的原因。它也可以用 bc
完成,但由于并非所有发行版都预安装了该命令,我认为上面的版本在这种情况下是最好的。
这里是验证的纯代码:
#!/bin/bash
op=$(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
num=1
if [ "y" = "$(echo | awk "($op > $num) { print \"y\"; }")" ]; then
printf "\n${op} is bigger than ${num}\n\n"
else
printf "\n${op} is smaller than ${num}\n\n"
fi
不用大惊小怪,awk
可以进行解析,小数比较,然后输出一个退出状态。任何带有 true/false 退出状态 的代码都可以在 if
之后或 &&
:
之前使用
top -bn1 | awk 'NR == 3 { f=( > 1) } END{exit !f}' && echo "yadda yadda"
awk
代码只检查第 3 行:NR == 3
;然后将第二项与 1 进行比较:( > 1)
;并将 true/false 值存储在 f
中,并输出 exit !f
的逻辑非,因此 unix shell 可以理解。
输出:
yadda yadda
在 awk
代码中添加 print
允许同时将值存储到 shell 变量 $n
:
if n=$(top -bn1 | \
awk 'NR == 3 { print ; f=( > 1) } END{exit !f}') ; \
then echo "$n > 1" ; else echo "$n <= 1" ; fi
输出(在我的系统上):
18.6 > 1
我尝试执行下面的 CPU 监控脚本,但脚本抛出错误。但是直接执行 top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g'
不会抛出错误。有人可以帮忙吗??
if (top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g') -gt 1 ; then
echo ('CPU percentage is $CPU_PER, which is higher than 50%. Kindly login to server and validate the process.')
else
echo ('Executing Else statement.')
fi
我不确定 shell 您使用的是什么,但如果您使用 Bash,命令将如下所示:
#!/bin/bash
# ... code ...
op=$(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
if [ "y" = "$(echo | awk "($op > 1) { print \"y\"; }")" ]; then
echo 'CPU Percentage is grater Which is Highere than 50% Kindly Login to server and validate the process'
else
echo 'Excuting Else statement '
fi
此外,由于 $(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
并不总是 return 整数,因此正常的 -gt
不起作用。这就是我在此示例中使用 awk
的原因。它也可以用 bc
完成,但由于并非所有发行版都预安装了该命令,我认为上面的版本在这种情况下是最好的。
这里是验证的纯代码:
#!/bin/bash
op=$(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
num=1
if [ "y" = "$(echo | awk "($op > $num) { print \"y\"; }")" ]; then
printf "\n${op} is bigger than ${num}\n\n"
else
printf "\n${op} is smaller than ${num}\n\n"
fi
不用大惊小怪,awk
可以进行解析,小数比较,然后输出一个退出状态。任何带有 true/false 退出状态 的代码都可以在 if
之后或 &&
:
top -bn1 | awk 'NR == 3 { f=( > 1) } END{exit !f}' && echo "yadda yadda"
awk
代码只检查第 3 行:NR == 3
;然后将第二项与 1 进行比较:( > 1)
;并将 true/false 值存储在 f
中,并输出 exit !f
的逻辑非,因此 unix shell 可以理解。
输出:
yadda yadda
在 awk
代码中添加 print
允许同时将值存储到 shell 变量 $n
:
if n=$(top -bn1 | \
awk 'NR == 3 { print ; f=( > 1) } END{exit !f}') ; \
then echo "$n > 1" ; else echo "$n <= 1" ; fi
输出(在我的系统上):
18.6 > 1