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

()여기서는 하위 쉘을 나타내는 것이 아니라 그룹화를 표시하는 데 사용하고 있습니다 .

관련 정보