Bash 将字符串和整数作为多条件进行比较

Bash 将字符串和整数作为多条件进行比较

我想检查当前的 GTK 主题并想检查当前时间,并基于此想更改主题如下:

GtkTheme=$(/usr/bin/gsettings get org.gnome.desktop.interface gtk-theme)
NightTheme="Adapta-Nokto"
DayTheme="Adapta"
TimeHrWithZero=$(date +%H)
TimeHr=$(bc<<<${TimeHrWithZero})
if [ "${GtkTheme}" != "${NightTheme}" ] && if ((${TimeHr}>=19 || ${TimeHr}<=5)); then
    echo ${GtkTheme} ${TimeHr} Night Theme
    /usr/bin/gsettings set org.gnome.desktop.interface gtk-theme ${NightTheme}
else
    echo ${GtkTheme} ${TimeHr} Day Theme
    /usr/bin/gsettings set org.gnome.desktop.interface gtk-theme "${DayTheme}"
fi

当我删除if [ "${GtkTheme}" != "${NightTheme}" ] &&代码时,代码可以工作,但没有这个条件。如何同时比较字符串和整数?

答案1

它应该是:

if [ "${GtkTheme}" != "${NightTheme}" ] && ((${TimeHr}>=19 || ${TimeHr}<=5)); then

if条件之间没有第二个。语句中的条件if是一个复合命令,它可以包含附加的ifs,这可能是导致这里问题的原因。

例子:

if true && if true; then false; fi; then echo foo; else echo bar; fi

被分组为

if (true && (if true; then false; fi)); then echo foo; else echo bar; fi

在这里,我用来()显示分组,而不是指示子 shell。

相关内容