Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: помощь с переменной в скрипте  (Прочитано 521 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DimmKo

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
    • Просмотр профиля
    • Image Hosting
Добрый день, есть задача:
надо в файлике проверить, что строка начинается с числа (т.к. иногда туда почему-то попадает текст).

Я для примера сделал тестовый скрипт, что бы проверить то ли я делаю.
Но у меня такая затыка:
Я объявляю переменную, а он ее выполняет, как команду.

Вот пример скрипта:
(Нажмите, чтобы показать/скрыть)
я вызываю скрипт и что получаю:
./test.sh
cat: /root/123/tmp: No such file or directory
Т.е. файла еще нет, а он уже почему-то из переменной команду берет.

Помогите, пожалуйста, найти ошибку.
Спасибо.

Причем, если ждать завершения скрипта, то я вижу, что файл появляется, но условие на срабатывает (с этим уже позже тогда буду разбираться).  :-[

P.S. Sleep'ы и прочее расставлены для отслеживания работы скрипта.
« Последнее редактирование: 10 Май 2017, 15:19:20 от DimmKo »
Ubuntu Server 14.04.3 LTS | x86_64

Оффлайн symon.2014

  • Забанен
  • Старожил
  • *
  • Сообщений: 1225
  • Ковырятель страны OS.
    • Просмотр профиля
Re: помощь с переменной в скрипте
« Ответ #1 : 10 Май 2017, 15:16:22 »
$AAA=`cat ~/123/tmp`   :idiot2:

Оффлайн DimmKo

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
    • Просмотр профиля
    • Image Hosting
Re: помощь с переменной в скрипте
« Ответ #2 : 10 Май 2017, 15:18:53 »
$AAA=`cat ~/123/tmp`   :idiot2:

Спасибо за совет.

Вот что выдает в при выполнении
./test.sh
cat: /root/123/tmp: No such file or directory
./test.sh: line 2: =: command not found
Ubuntu Server 14.04.3 LTS | x86_64

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2078
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Re: помощь с переменной в скрипте
« Ответ #3 : 10 Май 2017, 15:24:30 »
DimmKo, возьми свою переменную в обычные кавычки.

Оффлайн DimmKo

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
    • Просмотр профиля
    • Image Hosting
Re: помощь с переменной в скрипте
« Ответ #4 : 10 Май 2017, 15:35:17 »
DimmKo, возьми свою переменную в обычные кавычки.
Спасибо, ошибка ушла.

Может вы подскажете:
в условии скрипта, там где я проверяю начало строки
(Нажмите, чтобы показать/скрыть)
при записи $AAA - проверка не проходит.
Я пробовал и одинарные, и двойные кавычки - всё равно ошибка. Только после того, как я написал
Код: Bash
  1. if [[ `cat ~/123/tmp` == 1* ]]
у меня сразу стало работать.
Не могу понять почему не работает.

В других скриптах такого поведения я не заметил, ни с переменными, ни с оператором if.
Спасибо.
Ubuntu Server 14.04.3 LTS | x86_64

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: помощь с переменной в скрипте
« Ответ #5 : 10 Май 2017, 15:56:09 »
$AAA=`cat ~/123/tmp` 
Спасибо за совет.
За такой «совет» карать надо нещадно!
Т.е. файла еще нет, а он уже почему-то из переменной команду берет.
Что означает этот бред? В переменных не должна храниться «команда», там сохранен результат команды.
P.S. Не стоит пользоваться обратными кавычками, есть новая общепринятая форма «$(команда)»
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн DimmKo

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
    • Просмотр профиля
    • Image Hosting
Re: помощь с переменной в скрипте
« Ответ #6 : 10 Май 2017, 15:58:33 »
Что означает этот бред? В переменных не должна храниться «команда», там сохранен результат команды.
P.S. Не стоит пользоваться обратными кавычками, есть новая общепринятая форма «$(команда)»
Стало быть это я имел ввиду, просто написал не правильно. Извините.
$(команда) - тоже пробовал - та же история. Потому и обратился за помощью.
Ubuntu Server 14.04.3 LTS | x86_64

Оффлайн kalek

  • Активист
  • *
  • Сообщений: 267
    • Просмотр профиля
Re: помощь с переменной в скрипте
« Ответ #7 : 10 Май 2017, 16:02:04 »
Не могу понять почему не работает.
Потому и не работает, что скрипт выполняется построчно.
Запись
AAA=`cat ~/123/tmp`означает присвоить переменной AAA результат выполнения команды cat ~/123/tmp. Из-за этого была ошибка в самом начале: bash пытается применить команду cat к несуществующему файлу.
А запись
AAA="cat ~/123/tmp"означает присвоить переменной AAA строку cat ~/123/tmp, а поскольку эта строка не совпадает с 1*, то получаем ложное условие в if

В общем man bash в помощь.

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: помощь с переменной в скрипте
« Ответ #8 : 10 Май 2017, 16:03:41 »
kalek, +1 (опередили, писал то же самое… ;)  )
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: помощь с переменной в скрипте
« Ответ #9 : 10 Май 2017, 20:54:45 »
Код: Bash
  1. ...
  2.  
  3. [ -s ~/123/tmp ] && A="$(cat ~/123/tmp)"
  4.  
  5. if [[ x$A =~ ^x[0-9].* ]]
  6. then
  7.  
  8. ...
« Последнее редактирование: 10 Май 2017, 21:12:15 от renzrv »

Оффлайн DimmKo

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
    • Просмотр профиля
    • Image Hosting
Re: помощь с переменной в скрипте
« Ответ #10 : 11 Май 2017, 08:19:35 »
Потому и не работает, что скрипт выполняется построчно.
Спасибо, я знаю.

означает присвоить переменной AAA результат выполнения команды cat ~/123/tmp. Из-за этого была ошибка в самом начале: bash пытается применить команду cat к несуществующему файлу.
Я знаю, что там результат, просто полагал, что вначале мы объявляем переменные, а уже позже их читаем, присваиваем (или что там с ними  делаем).
означает присвоить переменной AAA строку cat ~/123/tmp, а поскольку эта строка не совпадает с 1*, то получаем ложное условие в if
Спасибо за разъяснение, этот момент упустил из виду.
Ubuntu Server 14.04.3 LTS | x86_64

 

Страница сгенерирована за 0.346 секунд. Запросов: 22.