我有两个文件。一个是date_command.txt,另一个是job_v3.sh
date_command.txt的内容是"时间,命令" .ex:" 1211,service nginx restart"
job_v3.sh的代码是从date_command.txt读取文件,然后将时间与系统时间进行比较。
如果时间相等,请运行命令。
Job_v3.sh的源代码是:
dateCommand=`cat /root/bash_practice/date_command.txt`
echo $dateCommand
#IFS=',' read -a myarray <<< "$mystring"
IFS=',' read -a dateCommand <<< "$dateCommand"
#echo "Date: ${dateCommand[0]}"
#echo "Command: ${dateCommand[1]}"
DATE=`date '+%m%d'`
#echo $DATE
if [ ${dateCommand[0]} = $DATE ];
then
echo $DATE
echo 'Date is the same.'
echo 'Current Time:'.$DATE
echo 'Target Time:'.${dateCommand[0]}
echo 'Command:'.${dateCommand[1]}
${dateCommand[1]}
else
echo $DATE
echo 'Date is different.'
echo 'Current Time:'.$DATE
echo 'Target Time:'.${dateCommand[0]}
echo 'Command:'.${dateCommand[1]}
fi
现在可以运行。
但是当命令为" echo 1234>> 1234.txt"时,它无法运行。
希望有人可以为我解决问题。
我会非常感谢。
这是因为 >>
被解释为字面参数,这是由于shells shells parse parse命令的命令,变量扩展不会改变重定向。请参阅重定向和外壳扩展
重新诠释文字
${dateCommand[1]}
可以更改为
eval ${dateCommand[1]}
eval
是危险的,您必须了解解析的完成方式,执行任意命令(从文件开始)也很危险。
最小示例:
cmd='echo 123 >> 123.txt'
$cmd
写入标准输出
123 >> 123.txt
和
eval $cmd
附加123到文件123.ttx