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は複合コマンドであり、ifこの問題の原因となる可能性がある追加のsを含めることができます。

例:

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

()ここでは、サブシェルを表すのではなく、グループ化を表示するために使用しています。

おすすめ記事