鉴于具体日期,我想查询和下载数据。数据格式为2018-04-22
,但脚本以2018 04 22
的形式获取数据,因此我执行以下操作:
#!/bin/sh
filename=extract_dates.dat
line=1
totline=`wc -l < $filename`
while [ $line -le $totline ]
do
date=`sed -n -e ''"$line"'p' $filename | awk '{print $line}'`
startdate=$(echo $date | tr "-" " ") # ex: 2018-04-22 --> 2018 04 22
plusone=`echo ${startdate:8:2}` # extracts the last 2 digits from date. so in this example 22
enddate=${startdate:0:8}`expr $plusone + 1` # plus 1 .. so now it's 23
echo \'$startdate\' # '2018 04 22'
echo \'$enddate\' # '2018 04 23'
mkdir $date
cd $date
# query and download data
../prog_access.sh -StartDate \'$startdate\' -EndDate \'$enddate\'
脚本运行但输出结果为null。 但是,这在命令行中完全正常:
../prog_access.sh -StartDate '2018 04 22' -EndDate '2018 04 23'
出了什么问题?我知道问题来自日期,但我不知道如何解决它。
答案 0 :(得分:1)
您需要在脚本中使用"$startdate"
而不是\'$startdate\'
。
../prog_access.sh -StartDate "$startdate" -EndDate "$enddate"
\'2018 04 22\'
与'2018 04 22'
不同。在脚本中将此字符串作为命令参数传递与键入
../prog_access.sh -StartDate \'2018 04 22\' -EndDate \'2018 04 23\'
在命令行中,此方法会导致StartDate
参数被读为'2018
。
此外,您不能在脚本中使用'$startdate'
,因为它不会替换变量值。
您可以查看this问题的答案,以便更加熟悉bash如何从变量传递参数以及在各种情况下如何读取它们。