Shell script — различия между версиями
Andy (обсуждение | вклад) (→Вывод на экран) |
Andy (обсуждение | вклад) |
||
| Строка 87: | Строка 87: | ||
Следует заметить, что двойные кавчки экранируют не все спецсимволы, поэтому если необходимо вывести какую-либо информацию как текст, то следует использовать одинарные кавычки, которые интерпретируют | Следует заметить, что двойные кавчки экранируют не все спецсимволы, поэтому если необходимо вывести какую-либо информацию как текст, то следует использовать одинарные кавычки, которые интерпретируют | ||
любую включенную в них информацию как текст! Обратный слэш (<code>\</code>) экранирует только символ следующий за ним! | любую включенную в них информацию как текст! Обратный слэш (<code>\</code>) экранирует только символ следующий за ним! | ||
| + | |||
| + | == Использование переменных == | ||
| + | Переменная - это область памяти, которая хранит некое значение. К этой области памяти можно обращаться по имени. Название переменной не может начинаться с цифры! Например: | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | [root@vm-01 ~]# cat test.sh | ||
| + | #!/bin/bash | ||
| + | |||
| + | one=1 | ||
| + | echo "This is number $one" | ||
| + | |||
| + | [root@vm-01 ~]# ./test.sh | ||
| + | This is number 1 | ||
| + | [root@vm-01 ~]# | ||
| + | </syntaxhighlight> | ||
| + | Хорошим тоном считается заключать значения, присваиваемые переменными в двойные кавычки, к примеру, потому, что в значении могут содержаться пробелы, а пробелы интерпретируются | ||
| + | <code>bash</code>'ем как разделитель слова. Так же, хорошим тоном считается заключение переменных в фигурные скобки, так как переменные могут конкатенироваться непосредственно | ||
| + | друг за другом, поэтому, во избежании получения неожиданных результатов, переменные следует записывать как <code>${one}</code>. | ||
Версия 12:28, 26 марта 2018
Содержание
Основы создания скриптов на bash
Предварительные требования
- Виртуальная машина с двумя сетевыми интерфейсами
- Установленные пакеты:
bash,bash-completion,vim-minimal,vim-enhanced
Общая информация
Любой скрипт, начинается с "магической строки" - сигнатуры, которая говорит командному интерпретатору как обрабатывать файл.
Для скриптов, такая последовательность носит называние she-bang (сокращение от sharp-bang):
#!Соответственно, если файл должен обрабатывать bash, то это необходимо указать после "магической строки". То есть, she-bang
будет иметь следующий вид:
#!/bin/bashЕсли скрипт предназначен для пользователя, то должны быть выставлен необходимый владелец файла, и права на запуск скрипта 755. Поскольку
скрипт является выполняемым, то по первым литерам названия, коммандный интерпертатор производит поиск названия в переменной $PATH,
соответственно, лучше выбрать имя для скрипта, которое не совпадает с имеющейся утилитой. Для просмотра переменной $PATH
надо выполнить следующую команду:
[root@vm-01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@vm-01 ~]#Поскольку текущая директория /root отсутствует в переменной $PATH, то запускать скрипты необходимо следующим образом:
[root@vm-01 ~]# ls -lahi test.sh
33969143 -rwxr-xr-x. 1 root root 34 Mar 26 10:38 test.sh
[root@vm-01 ~]# ./test.sh
Hello, world!
[root@vm-01 ~]#Вывод на экран
Скрипт test.sh использует комманду echo для отображения текстовой строки. По-умолчанию отображение производится
на стандартный поток вывода (STDOUT):
[root@vm-01 ~]# cat test.sh
#!/bin/bash
echo "Hello, world!"
[root@vm-01 ~]#Хорошим тоном считается выводить ошибки на поток ошибок (STDERR):
[root@vm-01 ~]# cat test.sh
#!/bin/bash
echo "Hello, world!"
echo "Something has happend! Can not proceed!" >&2
[root@vm-01 ~]#Запустим скрипт таким образом, что бы поток ошибок направлялся в файл:
[root@vm-01 ~]# ./test.sh 2>test.log
Hello, world!
[root@vm-01 ~]# cat test.log
Something has happend! Can not proceed!
[root@vm-01 ~]#При выводе на экран, следует учесть, что некоторые символы могут иметь специальное значение, в следствие чего, использование таких
символов может привести к результатам отличным от ожидаемого. Например, если необходимо узнать содержимое PATH, то следует
написать так:
[root@vm-01 ~]# cat test.sh
#!/bin/bash
echo "$PATH"
[root@vm-01 ~]# ./test.sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@vm-01 ~]#Если необходимо вывести именно строку $PATH, то следует использовать символы экранирования (двойные кавычки ", одинарные кавычки ', либо обратный слэш \):
[root@vm-01 ~]# cat test.sh
#!/bin/bash
echo "\$PATH"
echo '$PATH'
[root@vm-01 ~]# ./test.sh
$PATH
$PATH
[root@vm-01 ~]#Следует заметить, что двойные кавчки экранируют не все спецсимволы, поэтому если необходимо вывести какую-либо информацию как текст, то следует использовать одинарные кавычки, которые интерпретируют
любую включенную в них информацию как текст! Обратный слэш (\) экранирует только символ следующий за ним!
Использование переменных
Переменная - это область памяти, которая хранит некое значение. К этой области памяти можно обращаться по имени. Название переменной не может начинаться с цифры! Например:
[root@vm-01 ~]# cat test.sh
#!/bin/bash
one=1
echo "This is number $one"
[root@vm-01 ~]# ./test.sh
This is number 1
[root@vm-01 ~]#Хорошим тоном считается заключать значения, присваиваемые переменными в двойные кавычки, к примеру, потому, что в значении могут содержаться пробелы, а пробелы интерпретируются
bash'ем как разделитель слова. Так же, хорошим тоном считается заключение переменных в фигурные скобки, так как переменные могут конкатенироваться непосредственно
друг за другом, поэтому, во избежании получения неожиданных результатов, переменные следует записывать как ${one}.