Синтаксис и опции команды echo в Bash

Каждый Bash-скрипт стоит начинать со следующих строк:

Что такое bash

Bash расшифровывается как Bourne again shell (что можно перевести как «Еще одна оболочка Борна»), название частично заимствованно от более ранней версии командной оболочки UNIX, которая называлась просто Bourne shell («Оболочка Борна» – по фамилии разработчика Стивена Борна).

Bash позволяет интерактивно взаимодействовать с компьютером, вводя определенные команды и получая на них соответствующий отклик. Также этот командный процессор позволяет выполнять скрипты (команды из файла), может производить автодополнение названий файлов и директорий, допускает использование переменных, операторов ветвления и цикла. Далее в статье будут приведены самые простые и необходимые для работы в bash команды, которые помогут вам сориентироваться и начать самостоятельно использовать командную строку для своих задач, но сначала необходимо перейти к интерфейсу командной строки.

Опция -e команды echo в Bash

Опция -e команды echo в Bash служит для включения форматирования вывода с помощью коротких опций. То есть для включения SHORT-OPTION. Например, \n служит для перевода курсора на новую строку. Подключим к выводу опцию -e и убедимся, что опция в строке начала обрабатываться для форматирования вывода нашей строки:

[email protected]:~# echo -e «1\n2\n3\n4» 1 2 3 4

После этого становится смыл послания из документации:

If -e is in effect, the following sequences are recognized:

Перевести на русский это заклятие можно так:

Если присутствует опция -e, то распознаются следующие последовательности:

Читайте также:  Linux для начинающих. Часть 3. Установка операционной системы Linux

Вызов команд из истории

В моем случае это снова запустил ls -lrt, как вы можете видеть из вывода моей истории, это было на шесть команд выше моей последней команды.

Вы также можете использовать «!» как своего рода поиск. Используя мой пример истории bash, скажем, я хотел запустить последний цикл for, который был запущен. Вы можете использовать «! -14», но трудно вспомнить, сколько команд было назад, по крайней мере, для меня. Вместо этого мы можем сказать bash просто выполнить последнюю команду, начинающуюся с «for», вот так:

Пример:

[email protected]:~$ !for for i in `cat names`; do echo -n «FORWARD: $i — REVERSE: «; dig +short $i; done

Вы также можете указать по номеру, какую команду вы хотите запустить. Например, я хотел запустить команду 18 в приведенном выше примере. Используя восклицательный знак, сделать это можно так:

Например:

[email protected]:~$ !18 freshclam

Избавляемся от временных файлов

Некоторые команды ожидают на вход имя файла, с ними нам поможет оператор ‘<()’, он принимает на вход команду и преобразует в нечто что можно использовать как имя файла: # скачать два URLa и передать их в diff

diff <(wget -O — url1) <(wget -O — url2)

Использование маркера для передачи многострочных переменных: # MARKER — любое слово.

command << MARKER … ${var} $(cmd) … MARKER

Если нужно избежать подстановки, то маркер можно взять в кавычки: # конструкция вернет ‘$var’ а не значение переменной

var=»text» cat << ‘MARKER’ … $var … MARKER

Читайте также:  Linux для обычных пользователей. Книга для новичков

Метод извлечения для логического выражения

Один из способов улучшить наш пример — извлечь в функции математическое выражение из операторов if , например:

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 #!/bin/bash   function isDivisibleBy {     return $(($1%$2)) }   for number in {};     output=»»     if isDivisibleBy $number 3;         output=»Fizz»     fi     if isDivisibleBy $number 5;         output=»${output}Buzz»     fi     if [ -z $output ];         echo $number     else         echo $output;     fi done

Мы взяли выражения, сравнивающие остальные с нулем, и переместили их в функцию. Более того, мы исключили сравнение с нулем, потому что ноль означает для нас истину. Нам нужно только вернуть значение из математического выражения — очень просто!

Совет: определение функции должно предшествовать ее вызову.

В Bash вы можете определить метод как function func_name { commands; } function func_name { commands; } При желании существует второй синтаксис для объявления функций: func_name () { commands; } func_name () { commands; } Таким образом, мы можем удалить строку, function и добавить «()» после ее имени. Я лично предпочитаю эту опцию, как показано в примере выше. Это более явно и напоминает традиционные языки программирования.

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

Полученные параметры автоматически присваиваются переменным по номеру. Первый параметр имеет значение $1 , второй $2 и т. Д. Специальная переменная $0 указывает имя файла текущего скрипта.

Давайте поиграем с параметрами

01 02 03 04 05 06 07 08 09 10 11 #!/bin/bash   function exampleFunc {     echo $1     echo $0     IFS=»X»     echo «[email protected]»     echo «$*» }   exampleFunc «one» «two» «three»

Этот код выдаст следующий вывод:

1 2 3 4 5 [email protected] ~ $ ./ one ./ one two thre oneXtwoXthre

Давайте проанализируем источник построчно.

  • Последняя строка — это вызов функции. Мы называем это с тремя строковыми параметрами.
  • Первая строка после шебанга — это определение функции.
  • В первой строке функции выводится первый параметр: «один». Пока все просто.
  • Вторая строка выводит имя файла текущего скрипта. Опять очень просто.
  • Третья строка заменяет символьный разделитель по умолчанию на букву «X». По умолчанию это «» (пробел). Вот как Bash знает, как разделены параметры.
  • В четвертой строке выводится специальная переменная [email protected] . Он представляет все параметры как одно слово, точно так же, как указано в вызове функции.
  • В последней строке выводится другая специальная переменная, $* . Он представляет все параметры, взятые один за другим и объединенные с первой буквой переменной IFS. Вот почему результат — один oneXtwoXthre .