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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Вопрос по ошибкам в скрипте с bash и sh [Решено]  (Прочитано 8806 раз)

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

Оффлайн netum

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Доброго времени суток. Есть скрипт, который устанавливает пакет. По-дефолту в нём используется "#!/bin/sh", но при его запуске получаем ошибку
Цитировать
[: 8: 0: unexpected operator
, если поменять на "#!/bin/bash", то получаем другую ошибку
Цитировать
неоднозначное перенаправление
. Вот маленький скрип из двух частей:
"первая часть" выдаёт ошибку unexpected operator при sh и при bash всё норм;
"вторая часть" выдаёт ошибку неоднозначное перенаправление при bash и при sh всё норм.
#!/bin/sh

# первая часть
retval=$?
echo "retval=$retval"
if [ $retval == 1 ]; then
    exit
fi

# вторая часть
uninst="/home/uzer/te st/uninst.sh"
echo "Uninstalling utils" >> $uninst
В оригинальном скрипте проверок условий, как в первой части примера не мало, по-этому проще будет использовать bash для корректной работы первой части и исправить ошибку с "неоднозначное перенаправление". Отсюда вопрос, как это сделать?
В процессе экспериментов пришёл к выводу, что если убрать пробел из пути в переменной uninst, т.е. uninst="/home/uzer/test/uninst.sh", то всё норм. Но это не вариант, т.к. пакет, устанавливаемый этим скриптом, ставится в папку с пробелами в названии.
Ещё избавляет от ошибки с перенаправлением использование вместо переменной пути, сам путь, т.е. echo "Uninstalling utils" >> "/home/uzer/te st/uninst.sh" - это самый реальный вариант заменить в скрипте все строки с этим связанные. Но хотелось бы решить эту проблему "красивее"  :)
« Последнее редактирование: 07 Октября 2009, 08:26:20 от netum »

Оффлайн sciko

  • Активист
  • *
  • Сообщений: 854
    • Просмотр профиля
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #1 : 06 Октября 2009, 11:01:59 »
Хотелось бы напомнить, что sh в дебиан, а значит и Убанте, это символическая ссылка на dash.
Отсюда вопрос: так какой шелл хочет использовать топикстартер?

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #2 : 06 Октября 2009, 11:08:06 »
хотелось бы решить эту проблему "красивее"  :)
пробелы\ удобно\ экранировать\ обратным\ слэшем,\ возможно\ (в\\ скриптах)\ дважды

Оффлайн sciko

  • Активист
  • *
  • Сообщений: 854
    • Просмотр профиля
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #3 : 06 Октября 2009, 11:24:24 »
'А ещё можно воспользоваться одинарными кавычками!'
Только какое отношение это имеет к проблеме топикстартера?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #4 : 06 Октября 2009, 12:16:15 »
Первая проблема решается просто - перед точкой с запятой в if [ ]  надо поставить пробел.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #5 : 06 Октября 2009, 12:26:45 »
Первая проблема решается просто - перед точкой с запятой в if [ ]  надо поставить пробел.
Ничего подобного.
Цитировать
'[' is actually a program, just like ls and other programs, so it must be surrounded by spaces
Но тем не менее, ";" может разделять команды, следовательно, заменяет пробел.
Цитировать
Also, be aware of the syntax - the "if [ ... ]" and the "then" commands must be on different lines. Alternatively, the semicolon ";" can seperate them:
if [ ... ]; then
  # do something
fi
Ошибка, на самом деле, в двойном знаке равенства.
« Последнее редактирование: 06 Октября 2009, 12:29:44 от Frank »

Оффлайн sciko

  • Активист
  • *
  • Сообщений: 854
    • Просмотр профиля
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #6 : 06 Октября 2009, 12:43:10 »
А разве test не реагирует на единицу как на true?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #7 : 06 Октября 2009, 12:51:01 »
Ещё проще:
echo; if [ $? ]; then ls; fiИ совсем элементарно:
echo; test $? && ls

Оффлайн sciko

  • Активист
  • *
  • Сообщений: 854
    • Просмотр профиля
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #8 : 06 Октября 2009, 13:21:19 »
Ещё проще:
echo; if [ $? ]; then ls; fiИ совсем элементарно:
echo; test $? && ls
вот про это я и говорю.

Оффлайн netum

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #9 : 07 Октября 2009, 03:40:56 »
Пример составленный из двух частей был сделан на основе ошибок (если так можно сказать) из другого скрипта. Оригинальный пакет - это софт для управления рэйд контроллером от интел (три скрипта и рпм пакет). Так вот примеры проверок типа echo; if [ $? ]; then ls; fi это чудесно, коротко и ёмко, но такой структуры проверки, как в примере, много. По-этому проще работать в bash, т.к. при этом подобное не считается ошибкой, как я уже говорил выше. В общем меня больше интересует вторая часть приведённого тестового скрипта. Т.к. вывод в файл используется лишь в одном из трёх скриптов и сделан в несколько строк.

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #10 : 07 Октября 2009, 07:38:02 »
В общем меня больше интересует вторая часть приведённого тестового скрипта.
echo "Uninstalling utils" >> "$uninst"

Оффлайн netum

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #11 : 07 Октября 2009, 08:22:49 »
В общем меня больше интересует вторая часть приведённого тестового скрипта.
echo "Uninstalling utils" >> "$uninst"
Блин вроде бы так уже пробовал, хотел грязно выругаться, что мол такие простые вещи я уже проверял. Но решил попробовать и блин работает, на этом вопрос можно считать закрытым. Благодарствую  :)

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: Вопрос по ошибкам в скрипте с bash и sh
« Ответ #12 : 07 Октября 2009, 08:24:21 »
Просто почитай документацию, о назначении различных кавычек и их действии на переменные.

 

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