Перейти к содержимому

Как в параметрах скрипта передать две строки

  • автор:

Как в параметрах скрипта передать две строки

Скрипт listrpmpkgs, как мы успели заметить, не обладает развитыми вомзожностями. Он содержит и выполняет только одну команду. Мы не можем изменить его поведение, не написав другой скрипт.

Один из путей повышения мощности скрипта — научить его воспринимать опции командной строки. Подобно тому, как поведение утилиты rpm зависит от множества опций, мы можем изменять поведение скриптов, если сможем передавать в них информацию в виде параметров команды.

В языке shell определен ряд специальных переменных, с помощью которых можно передавать значения в сценарий. В таблице ниже перечисляются эти переменные.

Хранит имя самого скрипта, полученное из командной строки

MNorin.com

Блог про Linux, Bash и другие информационные технологии

Как передать параметры в bash-скрипт?

Вопрос: Как передать параметры командной строки в bash-скрипт, чтобы можно было его вызвать так: script.sh parameter1 parameter2?

Ответ:

Параметры командной строки можно проанализировать в скрипте, если использовать позиционные параметры, те параметры, которые доступны в скрипте через специальные предопределенные переменные, обозначаемые следующим образом: $.

$0 — это сам вызываемый скрипт
$1-9 — это параметры, которые будут указаны после скрипта при его вызове. $1 — первый параметр, $2 — второй и так далее.

Разбор позиционных параметров обычно производят при помощи структуры case:

case "$1" in ) ;; ) ;; . *) ;; esac

Если параметров больше 9, то для сдвига позиционных параметров используют команду shift. В качестве аргумента можно использовать число, указывающее, на сколько надо сдвинуть параметры.

Например, у нас есть такой вызов:

script.sh param1 param2 param3 param4 param5 param6

После вызова команды «shift 2» позиционные параметры будут сдвинуты так же, как и при следующем вызове:

script.sh param3 param4 param5 param6

Похожие посты:

  • Параметры командной строки в C/C++
  • Bash-скрипт, содержащий обрабатываемые данные
  • Проверка сертификата сервера из bash
  • Сканер tcp-портов на bash
  • Скрипт, который работает и в Linux, и в Windows
  • Bash. Как обойтись без goto
  • Как отправить письмо из командной строки
  • Параллельное выполнение в bash
  • Генератор паролей на bash
  • Toshiba AC100: Установка яркости матрицы/экрана ноутбука в linux’е
  • Нажмите здесь, чтобы поделиться контентом на Facebook. (Открывается в новом окне)
  • Нажмите, чтобы поделиться на LinkedIn (Открывается в новом окне)
  • Нажмите, чтобы поделиться на Reddit (Открывается в новом окне)
  • Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
  • Нажмите, чтобы поделиться записями на Tumblr (Открывается в новом окне)
  • Нажмите, чтобы поделиться записями на Pinterest (Открывается в новом окне)
  • Нажмите, чтобы поделиться записями на Pocket (Открывается в новом окне)
  • Нажмите, чтобы поделиться в Telegram (Открывается в новом окне)
  • Нажмите, чтобы поделиться в WhatsApp (Открывается в новом окне)
  • Нажмите, чтобы поделиться в Skype (Открывается в новом окне)

Запись опубликована 16.06.2014 автором Maxim Norin в рубрике Вопросы и ответы с метками bash, параметры.

Как в скрипт на bash через консоль передать строку параметром?

Скрипт воспринимает текст как два параметра, хочу разобраться как можно сделать, чтобы понимал как один параметр.

Отслеживать
Максим Сальников
задан 23 окт 2015 в 20:24
Максим Сальников Максим Сальников
135 1 1 серебряный знак 9 9 бронзовых знаков
Пишете всё правильно, значит дело в самом скрипте
23 окт 2015 в 20:42

зачем-то кто-то нажал «тревогу» с предожением уточнить подробности вопроса. не требуется тут никаких уточнений. всё абсолютно прозрачно.

23 окт 2015 в 23:03

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Bash переменные вставляет всегда как один параметр внутри двойных кавычек и разбивает по пробелам если кавычек нет. У вас $1 стоит вне кавычек. Нужно написать так:

convert -font helvetica -fill white -pointsize 16 -draw 'text 10,50 "'"$1"'"' /var/www/img/display.jpg /var/www/img/comment.jpg 

Отслеживать
ответ дан 23 окт 2015 в 20:49
6,894 2 2 золотых знака 27 27 серебряных знаков 57 57 бронзовых знаков
Спасибо! Скрипт работает.
23 окт 2015 в 20:52

‘text 10,50 «‘»$1″‘»‘ — это очень «жестокая» конструкция. по-моему, вполне достаточно и «text 10.50 \»$1\»»

23 окт 2015 в 22:38
Согласен, затрудняет понимание.
24 окт 2015 в 6:23

  1. в одинарных кавычках должно работать: ba.sh ‘one two’
  2. в двойных кавычках: ba.sh «one two»
  3. экранировать каждый пробел: ba.sh один\ два

Тестовый bash скрипт:

#!/bin/bash echo "Input: $1" 
# ./ba.sh One Two Input: One # ./ba.sh 'One Two' Input: One Two # ./ba.sh "One Two" Input: One Two # ./ba.sh One\ Two Input: One Two 

Ответ писал на первоначальную версию вопроса, потом не следил за обновлениями. Сам по себе ответ, может, кому-то пригодится. Но на поставленный вопрос он уже не отвечает.

Передача параметров в скрипт Python из командной строки.

При запуске скриптов, часто требуется указать какие-то дополнительные параметры, которые будут использованы в ходе работы программы. Конечно, можно при помощи функции input() получить данные от пользователя и сохранить их в переменных. Как говорится, дело вкуса. Но вместо множественного вызова функции input() есть намного более элегантное решение. Это передача параметров в скрипт python, непосредственно в командной строке — в момент вызова программы. Как это сделать? Давайте разберемся.

Для начала, наберите небольшую программу в своем редакторе. Сохраните её в папке C:\PyScript под именем input_var.py. Разумеется, папку и файл можете назвать как угодно, но тогда не забудьте указать свои данные при вызове скрипта в командной строке.

1. #-*- coding: UTF-8 -*- 2. from sys import argv 3. 4. script, first, second, third = argv 5. 6. print ("Этот скрипт называется: ", script) 7. print ("Значение первой переменной: ", first) 8. print ("Значение второй переменной: ", second) 9. print ("Значение третьей переменной: ", third)

Как видите, программа очень маленькая. Но её вполне хватит для демонстрации способа передачи данных в скрипт. После того, как следуя приведенным выше инструкциям, вы набрали и сохранили программу, вызовите командную строку Windows. После этого укажите имя интерпретатора python, путь к вызываемому файлу и три значения, разделяя все пробелами, как на рисунке ниже:

Передача данных в скрипт Python

Рис. 1 Передача данных в скрипт Python

Если у вас скрипт хранится в другой папке — укажите свой путь к нему. После этого нажмите клавишу Enter на клавиатуре. В результате вы должны увидеть следующее:

Передача данных в скрипт Python

Рис. 2 Результат выполнения программы

А теперь давайте разберем, как же это все работает.

Во второй строке мы импортируем argv из модуля sys. Во многих языках переменных argv — стандартное имя. В этой переменной хранятся данных, которые вы передаете сценарию. Пока нам достаточно знать, что эта переменная работает как «контейнер», в котором мы можем передать данные скрипту.

В четвертой строке мы производим «распаковку» содержимого argv в переменные. Слово «распаковка» может показаться странным, но в данном случае оно наиболее подходит. Фактически, мы сообщаем интерпретатору Python, что он должен взять данные из argv и последовательно поместить их в переменные, которые мы указали с левой стороны. После этого мы можем работать с ними как с обычными переменными, которым присвоили значения.

Вы можете указать свои значения вместо «15 два 105», но число значений, которые вы передаете скрипту, должно строго соответствовать количеству переменных, в которые «распаковывается» содержимое argv. Иначе вы увидите сообщение об ошибке:

Передача данных в скрипт python

Рис. 3 Ошибка распаковки данных.

Это сообщение возникло потому что мы передали в скрипт Python недостаточно данных. Если конкретнее, то строка ValueError прямо сообщает, что необходимо 4 значения, но указано 3 (имя скрипта передается автоматически).

Не забывайте, что все данные, которые мы передаем в программу python являются строковыми значениями. Поэтому параметры «10» и «105» сначала необходимо преобразовать в числовой тип при помощи функции int(), а только потом использовать в математических операциях. Будьте внимательны!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *