采购日期时间 Bash

Sourcing date hour in Bash

我需要编写一个 Bash 脚本来获取另一个脚本(配置脚本)数小时。如果配置脚本中提到的小时匹配 Linux 过去的小时,它需要打印小时。

$ cat ConfHours.sh
#!/bin/bash --

Hours=(0 1 2 22 23)

$ cat Foo.sh

#!/bin/bash --
source /home/Geo/ConfHours.sh
arrayHours=( ${HOURS} )
for v in "${arrayHours[@]}"
do
HOUR=$(( $(date +%H) -1))
if [ "${HOUR}" == "v" ] ; then
HOUR = ${HOUR}
echo $HOUR
fi
done

当我运行Foo.sh时,我没有得到任何东西。哪里不对请指正一下好吗?

一些错误:

source /home/Geo/ConfHours.sh
arrayHours=( ${HOURS} )

ConfHours 定义了一个名为 Hours 的变量 -- 不同的变量

for v in "${arrayHours[@]}"
do
HOUR=$(date -d "1 hour ago" +%H)

你不需要每次循环都定义它:把它放在for语句之前

if [ "${HOUR}" == "v" ] ; then
  • v 变量缺少 $
  • $HOUR 将包含前导 0(由于 %H
  • 更好的测试:if (( 10#$HOUR == 10#$v ))
HOUR = ${HOUR}

= 周围不允许有空格用于变量赋值。您为什么要尝试将变量重新定义为自身?

echo $HOUR
fi
done

一种更简洁的测试数组包含值的方法是利用数组字符串连接和模式匹配:

source ConfHours.sh
hour=$(date +%k)           # leading space, not leading zero
if [[ " ${Hours[*]} " == *" ${hour# } "* ]]; then 
    echo "$hour"
fi

所有空格和引号都是必需的。

不要使用 UPPER_CASE_VARS:here's why