Bash scripts
Команды или группу команд можно сохранять в текстовый файл, а после запускать.
Примеры скриптов и их описание
Ниже будут приведены примеры скриптов
Создание скрипта
- Создать текстовый файл через
vim <file>.shили командыйtouch + nano - Записать скрипт в файл
- Сохранить
- Выполнить
chmod +x <file> - Выполнить скрипт
bash <file>или./<file>
alias
- Псевдонимы или алиасы (англ. alias) — это команды, которые можно определить самостоятельно.
ubuntu@linux:~$ alias ll='ls -l'
ubuntu@linux:~$ ll
total 4
-rw-rw-r-- 1 ubuntu ubuntu 0 May 13 17:51 echo
-rwxrwxr-x 1 ubuntu ubuntu 66 May 13 17:31 hello.sh
PATH
PATH- файл, который хранит переменные окружения. Пути к исполняемым файла в директориях
echo $PATH - просмотр файла
export PATH="${PATH}:<новая директория которую хотите добавить>" - добавление нового пути
Очень
Переиспользуйте все заданные стандартно директории. Без этого Bash не сможет функционировать привычным для вас образом, так как потеряет доступ к внешним командам.
Hash
Чтобы каждый раз не смотреть в PATH, оболочка сперва использует внутреннюю хеш-таблицу для запоминания полного пути к командам, которые уже были запущены.
ubuntu@linux:~$ hash
hits command # hits - указывает на колличество запусков этой команды
1 /usr/bin/chmod
1 /usr/bin/man
3 /usr/bin/ls
4 /usr/bin/bash
1 /usr/bin/ps
4 /usr/bin/vim
- Если вы хотите очистить хеш-таблицу, можете использовать команду hash -r.
- Добавление в хеш-таблицу: hash <имя_команды>.
- Удаление из хеш-таблицы: hash -d <имя_команды>.
Массивы в Bash
В Bash массивы можно объявлять с помощью ключевого слова declare
$ declare -a MY_ARRAY
$ MY_ARRAY[0]="Hello"
$ MY_ARRAY[1]="World"
$ echo ${MY_ARRAY[0]} ${MY_ARRAY[1]}!
Hello World!
$ MY_ARRAY=("Hello" "World")
$ echo ${MY_ARRAY[0]}, ${MY_ARRAY[1]}!
Hello, World!
Конструкцию declare -r можно заменить на одно ключевое слово readonly. Атрибут readonly хорошо подходит для больших, развесистых скриптов, где много переменных и сложно отследить, где и какая меняется.
$ readonly MY_VARIABLE="Hello, World!" $ MY_VARIABLE="Hello, World?" bash: MY_VARIABLE: readonly variable
Специальные Переменные
Bash хранит код возврата последней выполненной команды в специальной переменной
$?
$ bash -c "exit 2"
$ echo $?
2
Переменная
$IFS(Internal Field Separator) используется для определения символа, который разделяет слова в строках. В операторе цикловforсписок элементов разделяется с использованием значения IFS
#!/bin/bash
# Пусть на вход поступает набор слов, разделённых двоеточием
line="home-directory:bash-directory"
# Переопределим IFS
IFS=":"
# Создадим массив
tokens=($line)
echo "${tokens[0]}" # Выводит "home-directory"
echo "${tokens[1]}" # Выводит "bash-directory"
Переменная
$$содержит идентификатор процесса оболочкиПеременная
$!содержит идентификатор последнего запущенного фонового процесса
Ввод аргумента и if-else
if [ "$1" ] ; then
echo "Hello {$1}"
else
echo "Hello World"
fi
Описание:
ifобъявление начала консрукции- В квадратных скобках пишется условие. В данном случае мы ожидаем "что-то" в первом аргументе, который передадим скрипту
- После скобок идет
; then, что выполниться в случае выполнения условия -
- Скрип выведет в терминал
Hello <переданный аргумент>
- Скрип выведет в терминал
elseчтобы будет, если условие не выполнено.-
- В терминале будет
Hello World
- В терминале будет
fiзакрытие конструкции
Подсказка
Аргументы в скриптах Bash доступны через переменные $1, $2, $3 и т.д.