Bash 脚本帮助替换

Bash 脚本帮助替换

有什么办法可以让我不必手动更改 maxruntime?

因此 --timeout“time”=maxruntime

SCRIPTS="/home/andy/bin/CPU_Stress_Test.txt"

command="/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 15s"
maxruntime=15s

rm $SCRIPTS
echo $command

$command >/dev/null 2>/dev/null &
watchpid=$!
date +"%Y-%m-%d-%H:%M:%S" >> $SCRIPTS
sensors -f | grep "temp4" >> $SCRIPTS
sensors -f | grep "fan1" >>  $SCRIPTS

/bin/sleep "$maxruntime"

if [ -d "/proc/$watchpid" ]
then
        echo "Max runtime exceeded, killing PID $watchpid"

        if /bin/kill -9 "$watchpid" >/dev/null 2>/dev/null
        then
                echo "Killed."
                exit 0
        else
                echo "Could not kill, please investigate manually."
                exit 1
        fi
fi
date +"%Y-%m-%d-%H:%M:%S" >> $SCRIPTS
sensors -f | grep "temp4" >> $SCRIPTS
sensors -f | grep "fan1" >>  $SCRIPTS

答案1

command只需交换和的分配顺序maxruntime并将其代入即可command

maxruntime="15s"
command="/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout ${maxruntime}"

答案2

关于您的代码的一些注释:

  • 当您想将命令存储在变量中时,请使用数组(参见:我试图将命令放入变量中,但复杂的情况总是失败!

    command=(/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout "$maxruntime")
    # then execute it like
    "${command[@]}"         # with the quotes!
    
  • 总是引用你的变量,除非你确切知道为什么要取消引用它们(参见:忘记在 bash/POSIX shell 中引用变量的安全隐患

  • 您有一些重复的代码,因此使用一个函数:

    get_sensor_info() {
        date +"%Y-%m-%d-%H:%M:%S"
    
        # if you don't care about order of "temp4" or "fan1"
        sensors -f | grep -E 'temp4|fan1'
    
        # or if you do care about the order, then you still only need to call sensors once
        sensor_info=$(sensors -f)
        echo "$sensor_info" | grep temp4
        echo "$sensor_info" | grep fan1
    }
    
    get_sensor_info >> "$stress_log"
    
  • 不要使用全大写变量名,把它们留给 shell。有一天你会写完PATH=xyz然后想知道为什么你的脚本坏了。

  • 你不需要重复使用>/dev/null 2>/dev/null-->>/dev/null 2>&或 bash 特定的&>/dev/null

  • 使用https://www.shellcheck.net检查你的代码是否有错误。

相关内容