我在Debian Linux 11下写了一个小脚本,它应该检查应用程序当前有多少个示例在运行,GPU卡的功耗是多少。我把它保存在name test下,每次我通过SSH访问示例时,它都会启动
#!/bin/sh
clear
a=$(nvidia-smi -q -i 0 | grep "Power Draw" | cut -c45-50)
b=$(nvidia-smi -q -i 1 | grep "Power Draw" | cut -c45-50)
c=$(nvidia-smi -q -i 2 | grep "Power Draw" | cut -c45-50)
d=$(nvidia-smi -q -i 3 | grep "Power Draw" | cut -c45-50)
zet=$( echo "$a" + "$b" + "$c" + "$d" | bc -l )
echo "SYSTEM DRAW:" "$zet"
if [ "${zet}" -gt 150 ]; then
echo WARRNING - SYSTEM DRAW LOW
else
echo OK
fi
sleep 8
exit
5条答案
按热度按时间a11xaf1n1#
您可以在要调试的部分之前添加
set -x
,这将显示bash中正在发生的调试,并通过在set +x
之后插入来停止它例如:
我认为您没有设置
$150
的值如果未设置其中一个比较值,脚本可能会失败。因此,您应该在脚本开始时或通过bash将变量初始化为"等于
0
""作为缺省值例如:
h79rfbju2#
可能出现的问题很多,但您可以使用
bc
比较可能的十进制值:ar7v8xwq3#
一个问题是
[
(和[[
)执行 * string * 比较,而您需要 * numeric * 比较,为此您需要使用((
,如下所示会工作得更好。否则总共
1000
会打印好,90
会给出警告。其他问题:
$150
为您提供了一个名为150
的变量的值--您可能希望删除$
[[
和((
这样的特殊形式之外,>
将执行输出重定向,而不是像[
这样的命令的"常规"参数。i5desfxk4#
正如评论所推荐的,使用shellcheck,然而,我认为你的意图不是你所写的。
尝试创建一个脚本(即
myscripy
)然后运行它
并打印
这可能和你想象的大不相同。
这是因为
power
将获取第一个参数的值($1
)并附加50
。如果你想要参数号
150
(* 也是非常不可能的 *),你应该写但如果你只想要数字
编辑
根据注解,使用
如果值是浮点,则计算
zet
。用于比较
ix0qys7i5#
所有我需要添加的是这一行x=${x%.*},转换十进制数的数字没有小数和脚本工程完美。