Bash compara string e integer juntos como multi-condições

1

Eu quero verificar o tema atual do GTK e quero verificar a hora atual, e com base nisso gostaria de mudar o tema da seguinte forma:

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

Quando eu removo if [ "${GtkTheme}" != "${NightTheme}" ] && , o código funciona, mas sem essa condição. Como posso comparar com a comparação de string e inteiros juntos?

    
por Nikhil 12.09.2018 / 07:51

1 resposta

2

Deve ser:

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

sem o segundo if entre as condições. A condição em uma instrução if é um comando composto, que pode incluir if s adicional, o que provavelmente está causando o problema aqui.

Exemplo:

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

é agrupado como

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

Aqui, estou usando () para mostrar o agrupamento, não para indicar subpastas.

    
por 12.09.2018 / 08:02