Blame
837010 | Mayekkuzu | 2024-11-12 19:00:55 | 1 |  |
02150a | Mayekkuzu | 2024-11-12 19:00:14 | 2 | |
3 | **Bash** (**B**ourne **A**gain **Sh**ell) - одна из нескольких сотен вариаций командной оболочки (CLI), весьма и очень часто применяемая в среде [Linux](/Linux), но может быть реализована и на [Windows](/Windows), с помощью [MinGW](/Windows/Software/MinGW) или [WSL](/Windows/Software/WSL). Скорее всего, в качестве оболочки по умолчанию в [Linux](/Linux) ты увидишь или Bash или [Sh](/Linux/System/Sh). Но не исключены другие варианты, вроде [Zsh](/Linux/System/Zsh) и ksh, но по сути освоив Bash можно легко перекатываться на другие оболочки, потому как суть у них примерно одна, разница лишь в некоторых особенностях. |
|||
4 | Так же как и любая командная оболочка поддерживает выполнение скриптов. |
|||
5 | ## Список встроенных команд Bash |
|||
6 | Опираться стоит на man самого интерпретатора Bash, поскольку в системе часть команд представлены как отдельные исполняемые файлы, возможно со своими особенностями и параметрами. |
|||
7 | ||||
8 | ### Ввод и вывод |
|||
9 | - **echo** - вывод выражения или содержимое переменной stdout |
|||
10 | - **printf** - тот же echo но более функциональный |
|||
11 | - **read** - чтение переменной с stdin (или ввод с клавиатуры если интерактивный режим) |
|||
12 | ### Файловая система |
|||
13 | - **cd** - изменение каталога |
|||
14 | - **pwd** - вывод текущего каталога |
|||
15 | - **pushd** - изменяет текущий каталог с возможностью возврата в обратном порядке |
|||
16 | - **popd** - возвращает текущий каталог после pushd |
|||
17 | - **dirs** - выводит или очищает содержимое стека каталогов, сохранённых через pushd |
|||
18 | ### Переменные |
|||
19 | - **let** - производит арифметические операции над переменными |
|||
20 | - **eval** - транслирует список аргументов из списка в команды |
|||
21 | - **set** - изменяет значения внутренних переменных скрипта |
|||
22 | - **unset** - удаляет переменную |
|||
23 | - **export** - экспортирует переменную, делая её доступной дочерним процессам |
|||
24 | - **declare**, **typeset** - задают и/или накладывают ограничения на переменные |
|||
25 | - **getopts** - используется для разбора аргументов, передаваемых скрипту из командной строки |
|||
26 | ### Управление сценарием |
|||
27 | - **source**, **.** (точка) запуск указанного сценария |
|||
28 | - **exit** безусловное завершение работы сценария |
|||
29 | - **exec** заменяет текущий процесс новым, запускаемым командой exec |
|||
30 | - **shopt** позволяет изменять ключи (опции) оболочки «на лету» |
|||
31 | ### Команды |
|||
32 | - **true** возвращает код завершения ноль (успешное завершение) |
|||
33 | - **false** возвращает код завершения, который свидетельствует о неудаче |
|||
34 | - **type** *prog* выводит полный путь к prog |
|||
35 | - **hash** *prog* запоминает путь к prog |
|||
36 | - **help** *COMMAND* выводит краткую справку по использованию внутренней команды *COMMAND* |
|||
37 | ### Управление запущенными в командной оболочке задачами |
|||
38 | - **jobs** показывает список запущенных в командной оболочке задач либо информацию о конкретной задаче по её номеру |
|||
39 | - **fg** переключает поток ввода на текущую задачу (или на определённую задачу, если указан её номер) и продолжает её исполнение |
|||
40 | - **bg** продолжает исполнение текущей приостановленной задачи (или определённых задач, если указаны их номера) в фоновом режиме |
|||
41 | - **wait** ожидает завершения указанных задач |
|||
42 | ## Пример простейшего скрипта |
|||
43 | ``` |
|||
44 | #!/bin/bash |
|||
45 | echo "Hello World!" |
|||
46 | ``` |
|||
47 | В первой строчке указан путь до Bash интерпретатора, во второй единственное действие - вывод строчки Hello World! |
|||
48 | Для того чтобы скрипт выполнился, необходимы права запуска (+x), поэтому назначить его можно так |
|||
49 | ```shell |
|||
50 | chmod +x scriptname.sh |
|||
51 | ``` |
|||
52 | В соответствии с требуемыми правами, рекомендуется ознакомиться со статьей [chmod](/Linux/System/chmod). Так же стоить отметить, что расширение не играет никакой роли, скрипт может называться произвольным образом. |