采购日期时间 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
我需要编写一个 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