October 5

Работа с Linux. Часть 5

Операторы

;

Оператор выполняет последовательно несколько команд. Если текущая команда выполнится неуспешно, то следующая всё равно выполнится.

Синтаксис:

команда1; команда2; команда3; 

Пример:

sudo apt-get update; sudo apt-get upgrade

&&

Оператор выполняет последовательно несколько команд. Если текущая команда выполнится неуспешно, то следующая не выполнится.

Синтаксис:

команда1 && команда2 && команда3 &&

Пример:

sudo apt-get update && sudo apt-get upgrade

||

Оператор выполняет следующую команду, если предыдущая выполнилась неуспешно.

Синтаксис:

команда1 || команда2 || команда2 || ...

Пример:

ls -a /there_is_no_dir || echo "error"

&

Запускает выполнение команды в фоновом режиме.

Синтаксис:

команда1 & команда2 & команда3 & ...

Пример:

sudo apt-get update & sudo apt-get upgrade &

\

Выполняет две функции:

  • Отменяет специальное назначение (экранирует) символов, таких как $, \, &, *, [, ], ^, .;
  • «Склеивает» несколько строк команды в одну.

Синтаксис:

команда1; \
команда2; \
команда3
...

Пример:

sudo apt-get update; \
sudo apt-get upgrade

|

Перенаправляет данные из одной команды в другую.

Синтаксис:

команда1 | команда2 | команда3 | ...

Примеры:

echo '!{"json": ["one", "two"]}' | tr -d '!' | jq -r "." | grep json
  "json": [

>

Оператор перенаправляет вывод команды в файл. Перезаписывает файл при существовании. Для скрытия вывода команды использовать конструкцию > /dev/null.

Синтаксис:

команда > файл

Пример:

echo "Hello, world!" > /dev/null
echo "Hello, world!" > hello.txt
cat hello.txt
Hello, world!

| tee

Оператор оставляет вывод команды на экран, при этом записывает его в файл. Перезаписывает файл при существовании.

Синтаксис:

команда | tee файл

Пример:

echo "Hello, world!" | tee hello.txt
cat hello.txt
Hello, world!

Hello, world!

>>

Оператор перенаправляет вывод команды в файл. При существовании файла дописывает в конец.

Синтаксис:

команда >> файл

Пример:

cat h.txt
echo "H" >> h.txt
cat h.txt
Hello, world!

Hello, world!
H

| tee -a

Оставляет вывод команды на экран, при этом записывает его в файл. При существовании файла дописывает в конец.

Синтаксис:

команда | tee -a файл

Пример:

cat hi.txt
echo "hello" | tee -a hi.txt
cat hi.txt
Hello, world!
Hi

hello

Hello, world!
Hi
hello

<

Использует данные из файла в качестве источника ввода в команду вместо клавиатуры.

Синтаксис:

команда < файл

Пример:

echo "10*10+10" > calc.txt
cat calc.txt
10*10+10
bc < calc.txt
110

<<EOF...EOF

Оператор позволяет ввести в команду многострочный текст.

Синтаксис:

команда <<EOF
многострочный
текст
EOF

Пример:

cat <<EOF
многострочный
текст
EOF
многострочный
текст

<<<

Передаёт указанный текст в команду вместо ввода с клавиатуры.

Синтаксис:

команда <<< "текст"

Пример:

bc <<< "10*10+10"
110

<(команды)

Возвращает путь к созданному временному файлу, содержащему результат выполнения одной или нескольких объединённых внутри конструкции команд.

Синтаксис:

команда <(команда_1; команда_2 && команда_3; ...)

Пример:

# Путь к временному файлу
echo <(uptime)
/dev/fd/63
# Содержимое временного файла
cat <(uptime)
 00:00:00 up 3 days,  5:20,  1 user,  load average: 0.00, 0.00, 0.00
cat <(uptime; date)
00:00:00 up 3 days,  7:27,  1 user,  load average: 0.00, 0.00, 0.00
Tue 01 Jan 2024 12:00:00 AM CET

Запуск скриптов

Локальные

Для выполнения скрипта, находящегося на сервере, необходимо:

  • Сделать его исполняемым;
  • Запустить его при помощи:
    • bash — для выполнения скрипта запускается ещё один сеанс Bash терминала, в следствии чего, например, не получиться использовать и обновлять переменные пользователя;
    • source / . — скрипт выполняется в сеансе Bash терминала, из которого был запущен скрипт.

Синтаксис:

# Bash
chmod +x путь_к_скрипту; \
./путь_к_скрипту аргументы
# Source
chmod +x путь_к_скрипту; \
. ./путь_к_скрипту аргументы

Пример:

# Bash
chmod +x script.sh; \
./script.sh -u -t "hi" "text" 666
# Source
chmod +x script.sh; \
. ./script.sh -u -t "hi" "text" 666

Запуск скрипта по ссылке.

Скрипты по ссылке, например из GitHub можно выполнять тремя способами:

Первый вариант:

Синтаксис:

# Bash
bash <(wget -qO- ссылка) аргументы
bash <(curl -s ссылка) аргументы
# Source
. <(wget -qO- ссылка) аргументы
. <(curl -s ссылка) аргументы

Второй вариант:

Синтаксис:

# Bash
wget -q ссылка; \
chmod +x путь_к_скрипту; \
./путь_к_скрипту аргументы

curl -sO ссылка; \
chmod +x путь_к_скрипту; \
./путь_к_скрипту аргументы

# Source
wget -q ссылка; \
chmod +x путь_к_скрипту; \
. ./путь_к_скрипту аргументы

curl -sO ссылка; \
chmod +x путь_к_скрипту; \
. ./путь_к_скрипту аргументы

Третий вариант:

Синтаксис:

# Bash
wget -qO- ссылка | bash -s аргументы -- опции
curl -s ссылка | bash -s аргументы -- опции

Установщики ПО

Существуют программы, которые устанавливаются более сложным способом, нежели при помощи пакетного менеджера. Для облегчения процесса установки некоторых из них были созданы скрипты, например:

Распространённые опции:

  • -h — страница помощи;
  • -v — установить указанную версию программы;
  • -un — удаление программы.