Blame

837010 Mayekkuzu 2024-11-12 19:00:55 1
![](/Linux/System/Bash/bash_title.jpg)
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). Так же стоить отметить, что расширение не играет никакой роли, скрипт может называться произвольным образом.