我需要编写一个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
时,我什么都没得到。你能纠正我错在哪里吗?
答案 0 :(得分:2)
一些错误:
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
%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