скрипт bash не работает с переменными - PullRequest
0 голосов
/ 29 апреля 2018

Учитывая конкретную дату, я хочу запросить и загрузить данные. Данные в формате 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\'    

Сценарий выполняется, но результат вывода равен нулю. Тем не менее, это прекрасно работает из командной строки:

   ../prog_access.sh -StartDate '2018 04 22' -EndDate '2018 04 23'

Что не так? Я знаю, что проблема с датами, но я не знаю, как ее исправить.

1 Ответ

0 голосов
/ 29 апреля 2018

Вам нужно использовать "$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' в своем скрипте, поскольку он не заменит значение переменной.

Вы можете посмотреть ответ на этот вопрос, чтобы узнать, как bash передает аргументы из переменных и как их читают в различных случаях.

...