Формирование переменной

Модератор: Модераторы разделов

Аватара пользователя
werewolfA
Сообщения: 6
ОС: Windows Vista Ultimate SP2

Формирование переменной

Сообщение werewolfA »

Как наверно это и бывает, никогда не пользовался Линуксом, а тут пришлось.
А всего то надо маленький скрипт написать и кажется ничего сложного, но блин, уже убил полдня, ничего не выходит

Надо

сформировать название файла в виде error20090627.log
в .sh файле пишу

получаю строку с датой
DATE=`date +%Y%m%d`
а вот как сформировать то что необходимо не получается

пишу например echo $DATE.log
получаю .log627
пробовал и с плюсами и с кавычками....никак не выходит

Подскажите, пожалуйста :unsure:
Спасибо сказали:
Аватара пользователя
VarLog
Сообщения: 311
ОС: openSUSE 12.2

Re: Формирование переменной

Сообщение VarLog »

Код: Выделить всё

> DATE=`date +%Y%m%d`
> echo error$DATE.log
error20090627.log
На самом деле всё очень просто...
Спасибо сказали:
Аватара пользователя
werewolfA
Сообщения: 6
ОС: Windows Vista Ultimate SP2

Re: Формирование переменной

Сообщение werewolfA »

Я тоже так думал....
у меня при вашей записи вот такой результат

.logr20090627

как видно сначала было добавлено error а потом на него сверху ляпнулось .log и потом только date

что это такое?

сервер у провайдера, может чего дополнительно уточнить?

И ещё - если я пишу в командной строке - то всё супер,
а если я тоже самое пишу в test.sh и запускаю через sh test.sh - то вот такие непонятки
Спасибо сказали:
Аватара пользователя
VarLog
Сообщения: 311
ОС: openSUSE 12.2

Re: Формирование переменной

Сообщение VarLog »

Выполните
echo $SHELL
На самом деле всё очень просто...
Спасибо сказали:
Аватара пользователя
werewolfA
Сообщения: 6
ОС: Windows Vista Ultimate SP2

Re: Формирование переменной

Сообщение werewolfA »

VarLog писал(а):
27.06.2009 21:32
Выполните
echo $SHELL


/usr/local/bin/bash
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Формирование переменной

Сообщение drBatty »

werewolfA писал(а):
27.06.2009 21:18
у меня при вашей записи вот такой результат

у вас откуда-то появился символ \r, перед точкой.
попробуйте ${DT}
возможно ${DATE} уже чем-то занято.
и ещё, когда мешаете переменные в одну кучу, пишите не $VARx$VAR2, а ${V}ARx${VAR}2, что-бы не было таких вот проблем. и по оригинальнее... вот ${MySysDate} точно нет :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
werewolfA
Сообщения: 6
ОС: Windows Vista Ultimate SP2

Re: Формирование переменной

Сообщение werewolfA »

drBatty писал(а):
27.06.2009 21:40
werewolfA писал(а):
27.06.2009 21:18
у меня при вашей записи вот такой результат

у вас откуда-то появился символ \r, перед точкой.
попробуйте ${DT}
возможно ${DATE} уже чем-то занято.
и ещё, когда мешаете переменные в одну кучу, пишите не $VARx$VAR2, а ${V}ARx${VAR}2, что-бы не было таких вот проблем. и по оригинальнее... вот ${MySysDate} точно нет :)


и со скобочками тоже пробовал...то же самое
но вот ещё
при выполнении следующего файла я имею другую картину

Код: Выделить всё

DT=`date +%Y%m%d`
cp ~/logs/error_log.previous ~/logs_archive/error${DT}.log
cp ~/logs/custom_log.previous ~/logs_archive/custom${DT}.log


я получаю следующее
custom20090627?.log
error20090627?.log?

Откуда ? знаки... :unsure: ?
Спасибо сказали:
Аватара пользователя
werewolfA
Сообщения: 6
ОС: Windows Vista Ultimate SP2

Re: Формирование переменной

Сообщение werewolfA »

Вообщем я так и не понял

В конструкции с переменной, к значению переменной в конец добавляется знак ?
а вот такая конструкция работает корректно...

Код: Выделить всё

cp ~/logs/error_log.previous ~/logs_archive/error`date +%Y%m%d`.log
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4463
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Формирование переменной

Сообщение Rootlexx »

werewolfA
Что-то мне подсказывает, что в скрипт писался из-под Windows, и там используются переносы строки CR/LF, а в Linux просто LF. То есть получается следующее (строчка скрипта вместе с этими символами):

Код: Выделить всё

DATE=`date +%Y%m%d`CRLF

LF обрабатывается, как и положено, а CR становится частью строки, которая заносится в переменную DATE.
Спасибо сказали:
Аватара пользователя
werewolfA
Сообщения: 6
ОС: Windows Vista Ultimate SP2

Re: Формирование переменной

Сообщение werewolfA »

Rootlexx писал(а):
27.06.2009 22:51
werewolfA
Что-то мне подсказывает, что в скрипт писался из-под Windows, и там используются переносы строки CR/LF, а в Linux просто LF. То есть получается следующее (строчка скрипта вместе с этими символами):

Код: Выделить всё

DATE=`date +%Y%m%d`CRLF

LF обрабатывается, как и положено, а CR становится частью строки, которая заносится в переменную DATE.


конечно из под Windows.
Я ж предупредил вначале, что ентого зверя впервые вижу :rolleyes:
я примерно догадывался об этом, качнул hex редактор, думал может что ещё там есть, так как данная конструкция у меня не вызывала подозрений.
Я даже не догадывался, что может быть такой прикол, как отсутствие каретки...

Спасибо.
Спасибо сказали: