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 test
中bash
):
==
未正式提及,您应该=
用于字符串比较-eq
用于十进制算术测试(在这里不会有什么不同,date +%u
但date +%d
例如在比较04
和4
数字相同但词汇不同时)。我会选择:
if [ "${DAYOFWEEK}" -eq 4 ]; then echo YES; else echo NO; fi
Run Code Online (Sandbox Code Playgroud)
通常,您应该更喜欢天数方法,因为它对当前语言环境的依赖性较小。在我的系统上,输出date +"%a"
是 today Do
。
不要忽视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="$(...)"
)。
归档时间: |
|
查看次数: |
37655 次 |
最近记录: |