2016-12-15 106 views
1

编写了一个Bash脚本来创建两个文件,每个文件都有一个日期列表,以便以后使用。该脚本需要三个参数:数据主题,最短日期和最大日期。这里是我的脚本:Bash脚本不创建文件

#!/bin/sh 
     dataSubj=$1 
     minDate=$2 
     maxDate=$3 

     echo -e "my variables:\nsubject:\t$dataSubj\nstart:\t$minDate\nend:\t$maxDate" 
     //Wrote the above line for debugging 

     configDir=/opt/site1/ETL/MFGEDW/config/MERS2 
     dateCount=1 
     addTime=00:00:00 
     fromDates=$dataSubj_fromDates.txt 
     toDates=$dataSubj_toDates.txt 

     cd $configDir 

     echo "Creating fromDates file and adding $minDate" 
     echo -e "$minDate $addTime" > ./$fromDates 

     echo "Creating toDates file" 
     >./$toDates 

     while [[ $minDate < $maxDate ]] 
      do 
       minDate=$(date -d "$minDate 7 days" +%Y-%m-%d) 
       ((dateCount++)) 
       if [[ $minDate < $maxDate ]]; then 
        echo "Adding $minDate to fromDates file" 
        echo -e "$minDate $addTime," >> ./$fromDates 
       fi 

       echo "Adding $minDate to toDates file"  
       echo -e "$minDate $addTime," >> ./$toDates 

       echo "$dateCount dates total" 
     done 

     exit $dateCount 

我的问题是,不是有两个文件与所需的日期,我对此应该已经写在这两个文件中的所有日期一个隐藏的文件。我对脚本编程相当陌生,但在我使用过的其他脚本和知道工作之后对其进行了建模。是否有我丢失或不必要的添加?提前致谢。

+0

文件的名称是什么?给你的脚本提供这些和参数。 – kabanus

+0

@kabanus隐藏文件的名称是.txt,参数是:mySubject,2016-10-10,2016-12-10 – user3517375

回答

3

这是你的问题:

fromDates=$dataSubj_fromDates.txt 
toDates=$dataSubj_toDates.txt 

击不知道你的意思dataSubj是变量的名称。你试图使用两个不同的变量:

dataSubj_fromDates 
dataSubj_toDates 

很确定那些不存在。注意 '。'是变量命名的制止者。尝试使用:

fromDates=${dataSubj}_fromDates.txt 
toDates=${dataSubj}_toDates.txt 

下一次打印所有变量调试时。

+0

这样做。当我需要使用{}时,您是否有良好的来源供我阅读?我用过其他人写的脚本,他们用echo -e“whatever”> ./$variableName.txt创建文件。他们是ksh脚本,不知道这是否有所作为。 – user3517375

+0

这不是一个很大的“法律”,所以我不认为有这方面的重点。基本上,如果你的变量是字符串的一部分,那么你需要它 - 所有脚本语言都是如此。否则,解释器认为变量的名称是整个字符串。 – kabanus

+0

很高兴知道,感谢您的帮助。 – user3517375