функция не работает

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

safronowmax
Сообщения: 87

функция не работает

Сообщение safronowmax »

Здравствуйте, подскажите пожалуйста, начинаю изучать функции в bash и не могу понять - есть простейший скрипт, запуск которого с нужным ключом mykey должен приводить к выводу текста "мой текст". Скрипт работает, но если я его помещаю в функцию myfunc, то скрипт перестает работать, никаких ошибок при запуске скрипта нет, но и вывода текста не происходит. С чем это может быть связано?

Вот исходный скрипт:

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

#!/bin/bash
case "$1" in
-mykey)

echo "мой текст"
esac

Вот обернутый в функцию:

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

#!/bin/bash
function myfunc {
case "$1" in
-mykey)

echo "мой текст"
esac
}

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

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: функция не работает

Сообщение Bizdelnick »

Потому что внутри функции $1 — это аргумент функции, а не скрипта. А Вы ей никаких аргументов не передаёте.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

safronowmax
Сообщения: 87

Re: функция не работает

Сообщение safronowmax »

Bizdelnick, спасибо большое. Но не могу понять, а как тогда в этом случае можно передать аргумент именно скрипту при использовании функции?
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: функция не работает

Сообщение Hephaestus »

safronowmax писал(а):
18.03.2021 07:22
а как тогда в этом случае можно передать аргумент именно скрипту при использовании функции?
Точно так же. Просто у Вас получилось $1 внутри функции, а для скрипта нужен ещё один $1 - внутри скрипта, но за пределами функции.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 1137
ОС: Fedora

Re: функция не работает

Сообщение s.xbatob »

safronowmax писал(а):
18.03.2021 07:22
Но не могу понять, а как тогда в этом случае можно передать аргумент именно скрипту при использовании функции?
Не понял что вы хотите — передать аргументы скрипта в функцию? Тогда myfunc "$@"
Спасибо сказали:

safronowmax
Сообщения: 87

Re: функция не работает

Сообщение safronowmax »

Не понял что вы хотите — передать аргументы скрипта в функцию? Тогда myfunc "$@"
s.xbatob, спасибо вам большое! Это именно то, что мне нужно
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 1137
ОС: Fedora

Re: функция не работает

Сообщение s.xbatob »

safronowmax, всегда пожалуйста :)
Только передавать все аргументы в функции — не самое мудрое решение. Их лучше один раз разобрать в начале скрипта, а в функции передавать только то, что они хотят. И для разбора есть специальные инструменты: getop и getopts. Правда, их использовать не слишком просто, но — в шелле всё так :(
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: функция не работает

Сообщение Bizdelnick »

s.xbatob писал:
18.03.2021 18:24
И для разбора есть специальные инструменты: getop и getopts.
Для ознакомления лучше считать, что есть только getopts, ибо он стандартен и есть везде.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 1137
ОС: Fedora

Re: функция не работает

Сообщение s.xbatob »

Bizdelnick писал:
18.03.2021 18:52
Для ознакомления лучше считать, что есть только getopts, ибо он стандартен и есть везде.
getopt
Он кое-куда уже встроен (в bash точно есть), и использовать его проще. Правда, и возможностей меньше.
Добавлено (20:54):
ой, наоборот. Действительно getopts
Спасибо сказали: