bash脚本不适用于变量

时间:2018-04-29 09:41:00

标签: bash sed tr

鉴于具体日期,我想查询和下载数据。数据格式为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'

出了什么问题?我知道问题来自日期,但我不知道如何解决它。

1 个答案:

答案 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如何从变量传递参数以及在各种情况下如何读取它们。