Автор Тема: Функции в скриптах на bash/sh [решено]  (Прочитано 1695 раз)

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Никак не могу понять, чего от меня хочет интерпретатор. Пишу пример типа:
#!/bin/sh
func(){
echo 1
}
func
и без вопросов скрипт выполняется. Однако, когда я делаю объявление подобной функции в скрипте report-sender (который отвечает за отправку отчетов на сервер статистики), то меня посылают "/home/sb/report-sender.sh: line 119: `func': неправильный идентификатор", причем ругань идет на замыкающую фигурную скобку (бишь "}") и скрипт не работает. Что тут не так ?

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: Функции в скриптах на bash
« Ответ #1 : 20.03.2016 20:42:31 »
А нет там ещё какой-то func? Уж очень имя распространённое

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: Функции в скриптах на bash
« Ответ #2 : 20.03.2016 20:43:27 »
PS Скрипт отошли в личку - взгляну свежим взглядом

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #3 : 20.03.2016 20:43:58 »
А нет там ещё какой-то func? Уж очень имя распространённое
В том-то и дело, что нет. Все переменные в названиях короче, а функция одна (решил код подсократить, да что-то не получается) :(

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #4 : 20.03.2016 20:45:51 »
PS Скрипт отошли в личку - взгляну свежим взглядом
Там длинная простыня заунывная (стыдно даже показывать). Если без функций, то все работает отлично (почти закончил скрипт, осталось совсем малость - дописать отправку созданного system-report архива). Причем у меня и в других скриптах подобное было уже. Никак не могу понять, где ошибка синтаксиса (по факту выполнения кода этих ошибок нет).

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #5 : 20.03.2016 20:47:54 »
А, может ему надо обязательно exit 0 сделать в конце ?

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #6 : 20.03.2016 20:48:21 »
А, может ему надо обязательно exit 0 сделать в конце ?
Неа, не помогает...

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #7 : 20.03.2016 20:51:08 »
Объявление функции выглядит так:
function func ()
{
h=localhost
p=8312
i=3
k=1
ex=$1
sc=$2
mg=$3
tl=$4
a=
echo -n "$tl"
while [ $k -le $i ]; do
 a=$(nc $h $p)
 echo -n "."
 if [[ $a == $sc ]]; then ex= && echo -n "(успешно)"$'\n' && break; fi
 k=$[$k+1]
 sleep 1
done
if [[ ! $a || $a != $sc ]]; then
 if [ $ex ]; then
  echo $'\n'"$mg."'\n'
  exit $ex
 fi
fi
}
До вызова её в скрипте не доходит - вываливается вышеобозначенная ругань.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: Функции в скриптах на bash/sh
« Ответ #8 : 20.03.2016 20:52:59 »

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #9 : 20.03.2016 20:55:17 »
До вызова её в скрипте не доходит - вываливается вышеобозначенная ругань.
Вызов функции выглядит так:
func \
5 \
"string1" \
"string2" \
"string3"

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #10 : 20.03.2016 20:56:19 »
a=
Так скрипт выполняется без проблем с этим объявлением (переменная a не определена или имеет пустое значение).

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #11 : 20.03.2016 21:00:07 »
a=
Так скрипт выполняется без проблем с этим объявлением (переменная a не определена или имеет пустое значение).
Присваивание пустой строки (a="") тоже не помогает.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: Функции в скриптах на bash/sh
« Ответ #12 : 20.03.2016 21:03:39 »
Убери слово function

func()
{
h=localhost
p=8312
i=3
k=1
ex=$1
sc=$2
mg=$3
tl=$4
a=""
echo -n "$tl"
while [ $k -le $i ]; do
 a=$(nc $h $p)
 echo -n "."
 if [[ $a == $sc ]]; then ex= && echo -n "(успешно)"$'\n' && break; fi
 k=$[$k+1]
 sleep 1
done
if [[ ! $a || $a != $sc ]]; then
 if [ $ex ]; then
  echo $'\n'"$mg."'\n'
  exit $ex
 fi
fi
}

 

func \
5 \
"string1" \
"string2" \
"string3"

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #13 : 20.03.2016 21:03:46 »
Все, нашел очепятку. Но это не помогло.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Re: Функции в скриптах на bash/sh
« Ответ #14 : 20.03.2016 21:06:08 »
Все, нашел очепятку. Но это не помогло.
Убери слово funckcion
Да, что-то с именем функции. Оно у меня было в оригинале как у названия самого скрипта. Поменял и заработало :)