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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [Solved] Как получить переменные из командной строки?  (Прочитано 892 раз)

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

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
День добрый.

Застрял на вопросе при написании баш-скрипта.

Если у меня есть простой скрипт вида:

$ cat ./t3.sh
#!/bin/bash

echo $0 $1 $2

То при его вызове команды "./t3.sh test1 test2" я нормально получаю свои переменные. Но если я использую более сложную конструкцию типа:

$ cat ./t3.sh
#!/bin/bash

_test() {
  echo $0 $1 $2
}

_test

...то я не получаю ничего. Если во втором варианте способ вывести значение своих переменных?

PS: Кстати, совсем нубский вопрос - а как вообще называется эта конструкция "variable() {...}"? Подсмотрел её в других скриптах, использовать её удобно, но так как я далёк от программирования - без понятия как это называется. :(
« Последнее редактирование: 26 Февраля 2018, 20:15:33 от BAKT »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Это назавается функция.

Если во втором варианте способ вывести значение своих переменных?
$ cat ./t3.sh
#!/bin/bash

_test() {
  echo $0 $1 $2
}

_test $0 $1 $2


Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Спасибо. Только один вопрос, почему при вызове параметра $0 получается фигня какая-то?

Цитировать
$ ./t3.sh 1 2
./t3.sh ./t3.sh 1
Т.е. два раза выдаётся имя файла и не выдаётся 3-й параметр. А как я понимаю вывод должен быть такой:

Цитировать
./t3.sh 1 2

или нет?

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
BAKT,
Используй аргументы от 1:
_test() {
  echo $1 $2 $3
}

_test $1 $2 $3

или
_test() {
  echo $*
}

_test $*
« Последнее редактирование: 25 Февраля 2018, 23:34:01 от ReNzRv »

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
BAKT, Давайте Вам проясню:
- нумерация массива начинается с 0
- название файла (программы) тоже является аргументом командной строки
А потому, аргументы, что вы туда передаете начинаются с 1
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
_test() {
  echo $0 $1 $2
}
Код: (bash) [Выделить]
#!/bin/bash

_test() {
    echo $*
}

_test $0 $1 $2
« Последнее редактирование: 26 Февраля 2018, 12:12:48 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
BAKT, Давайте Вам проясню:

Понятно. Было у меня такое подозрение, но решил уточнить.

#!/bin/bash

Спасибо за ваш вариант.

 

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