gpt4 book ai didi

linux - 关闭 PC 并在使用 BASH 之前做一些事情

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:51 25 4
gpt4 key购买 nike

我想在电池没电之前关闭电脑并复制一些文件。

#!/bin/bash
LOW=11460
BAT=`/bin/cat /proc/acpi/battery/BAT1/state | /bin/grep remaining | /usr/bin/awk '{print\$3}'`
if ["$BAT" \< "$LOW"]
then
echo "Turning off"
rsync folder/ otherfolder/
shutdown -h now
fi

但它不起作用!

最佳答案

您的语法不正确。您不必要地转义了部分代码,并且您的测试表达式在使用 [ 时需要变量周围的空格和数字比较。构造。例如:

#!/bin/bash
LOW=11460
BAT=`/bin/cat /proc/acpi/battery/BAT1/state | /bin/grep remaining | /usr/bin/awk '{print $3}'`
if [ "$BAT" -lt "$LOW" ]
then
echo "Turning off"
rsync folder/ otherfolder/
shutdown -h now
fi

假定两者 /bin/usr/bin在您的道路上,我将进行以下更改:

BAT=`cat /proc/acpi/battery/BAT1/state | grep remaining | awk '{print $3}'`

也考虑使用 (())作为你的测试表达。例如

if ((BAT < LOW))

注意 BAT 周围的空格和 LOW使用 (()) 时不需要测试构造,并且无需使用 $ 取消引用您的变量里面(())除非使用大括号扩展或数组语法。例如((${#array[@]} < something)) .

此外,由于您正在调用需要 root 的脚本通话权限 shutdown , 你应该测试 root EUID在开头:

if ((EUID != 0)); then
printf "error: script must be run by root, EUID: '%s' can't.\n" $EUID
exit 0
fi

或者如果您更喜欢普通的 [测试结构:

if [ $EUID -ne 0 ]; then
...

关于linux - 关闭 PC 并在使用 BASH 之前做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31889671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com