需要比较bash shell linux中的当前时间

需要比较bash shell linux中的当前时间,linux,bash,shell,Linux,Bash,Shell,我在bash中使用下面的脚本比较当前时间并更改$VAL的值。但这个脚本给出了 ./valscr.sh:第14行:语法错误:文件意外结束 此脚本中没有第14行 export NOW= `date +"%k%M"` export VAL="O" if [ $NOW -lt 1200]; then export VAL="M" fi if [ $NOW -ge 1200 -a $NOW -lt 1800 ]; then export VAL="U" fi if [ $NOW -ge 1800 ];

我在bash中使用下面的脚本比较当前时间并更改
$VAL
的值。但这个脚本给出了

./valscr.sh:第14行:语法错误:文件意外结束

此脚本中没有第14行

export NOW= `date +"%k%M"`
export VAL="O" 
if [ $NOW -lt 1200]; then
export VAL="M"
fi
if [ $NOW -ge 1200 -a $NOW -lt 1800 ]; then
export VAL="U"
fi
if [ $NOW -ge 1800 ]; then
export VAL="E"
fi
echo $NOW
echo $VAL

当我复制脚本时,由于变量赋值中的空格和“test”条件(在“=”之后没有空格,在“]'之前需要空格),我得到了错误。当我解析这些项时,脚本就工作了。但是,您的错误表明您的文件中有“隐藏”字符,即“\r”(返回字符)

要检查这一点,请尝试“cat-E your_file”

是否看到“^M”或其他奇怪的字符?请注意,您应该看到“$”(行尾标记)。删除“^M”或其他“错误的控制代码”,您的脚本应该可以工作

:)

Dale

请注意,
export NOW=`date+%k%M`
实际上应该是
export NOW=`date+%k%M`
(在
=
后面没有空格)。除了@ruakh的注释之外:第三行中的
1200
]
之间应该有空格。脚本与bash一起工作。更具体一点,你不需要导出变量,除非它们将被子进程使用。请使用shellcheck.net检查您的代码当您根据
-lt 1200
-ge 1800
进行检查时,您知道剩下的代码将具有
val=“U”
。小写的变量是一个好习惯,使用ìf-then-else-fi中的
else