2016-12-15 3 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 

Bash не знает, что значит 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

Смежные вопросы