如何使用基于星期几的 If-Else 查询?

Swa*_*ika 11 shell shell-script date test

问题:我需要检查今天是否是星期四并根据此条件的结果执行不同的操作。我尝试了两种不同的方法:

获取日期名称:

DAYOFWEEK=$(date +"%a")
echo DAYOFWEEK: $DAYOFWEEK
if ["$DAYOFWEEK" == "Thu"]; 
then   
   echo YES
else
    echo NO
fi
Run Code Online (Sandbox Code Playgroud)

获取天数:

DAYOFWEEK=$(date +"%u")
echo DAYOFWEEK: $DAYOFWEEK

if ["$DAYOFWEEK" == 4]; 
then
   echo YES
else
   echo NO
fi
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,输出都是 NO,即使它应该是 YES。怎么了?

H.-*_*itt 12

问题是缺少空白。

以下代码将在其[内置命令接受==作为别名的shell 中工作=

if [ "$DAYOFWEEK" == 4 ];  then    echo YES; else    echo NO; fi
Run Code Online (Sandbox Code Playgroud)

但是要记住(见help testbash):

  • ==未正式提及,您应该=用于字符串比较
  • -eq用于十进制算术测试(在这里不会有什么不同,date +%udate +%d例如在比较044数字相同但词汇不同时)。

我会选择:

 if [ "${DAYOFWEEK}" -eq 4 ];  then    echo YES; else    echo NO; fi
Run Code Online (Sandbox Code Playgroud)

通常,您应该更喜欢天方法,因为它对当前语言环境的依赖性较小。在我的系统上,输出date +"%a"是 today Do


Sté*_*las 5

不要忽视case哪种方法通常是做此类事情的更好方法:

另请注意, 的输出date +%a取决于区域设置,因此,如果您期望英文名称,则您的脚本在被法语或韩语用户调用时将停止工作。

case $(LC_ALL=C date +%a) in
   (Mon) echo first day of the week;;
   (Thu) do-something;;
   (Sat|Sun) echo week-end;;
   (*) echo any other day;; # last ;; not necessary but doesn't harm
esac
Run Code Online (Sandbox Code Playgroud)

$(...)请注意,上面是不需要引用的罕见情况之一 (尽管引号不会造成损害。与 中相同var="$(...)")。