我正在尝试创建一个与 crontab 一起运行的脚本,如果有任何更新可用,该脚本将发送通知。脚本本身没有给我任何错误,但是在 if 语句中只有“else”部分起作用。有任何想法吗?
#!/bin/bash
sudo apt update > ~/Desktop/UpdateInfo
update1=$(grep "package can be upgraded" ~/Desktop/UpdateInfo | cut -d' ' -f2,3,4,5)
var1="package can be upgraded."
if [ var1 = update1 ]
then
notify-send "Updates are available"
else
notify-send "test"
fi
答案1
您正在将 stringvar1
与 string进行比较update1
。这些永远不会一样。您想要比较变量:
if [ "$var1" = "$update1" ]
当然,整个事情可以简化为:
sudo apt update | grep -q "package can be upgraded" && notify-send "Updates are available"
答案2
在基于 Debian 的发行版上,您可以使用pk-update-icon
包裹:
显示更新通知托盘图标
当软件包更新可用时,这个小工具会在面板的托盘区域中显示通知和图标。它主要是为尚未集成此功能的桌面而设计的,例如 Xfce。
apt install pk-update-icon
安排一个 cron 作业(短暂的延迟用于测试建议。)例如:
crontab -e
过去以下行:
*/1 * * * * export DISPLAY=:0 ; /usr/bin/pk-update-icon -d 5 ; sleep 5 ; pkill pk-update-icon
答案3
您有一些代码错误:
#!/bin/bash
sudo apt update > ~/Desktop/UpdateInfo
update1=$(grep "package can be upgraded" ~/Desktop/UpdateInfo | cut -d' ' -f2,3,4,5)
var1="package can be upgraded."
if [[ "$var1" == "$update1" ]]; then
notify-send "Updates are available"
else
notify-send "test"
fi
您需要使用$
来扩展您的变量。
使用测试时您绝对需要引用变量[
。从技术上讲,测试中不需要它[[
,但无论如何您都应该引用。