Shell script — различия между версиями
Andy (обсуждение | вклад) (→Общая информация) |
Andy (обсуждение | вклад) (→Вывод на экран) |
||
Строка 33: | Строка 33: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | == Вывод на экран == | |
Скрипт <code>test.sh</code> использует комманду <code>echo</code> для отображения текстовой строки. По-умолчанию отображение производится | Скрипт <code>test.sh</code> использует комманду <code>echo</code> для отображения текстовой строки. По-умолчанию отображение производится | ||
− | на стандартный | + | на стандартный поток вывода (<code>STDOUT</code>): |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
[root@vm-01 ~]# cat test.sh | [root@vm-01 ~]# cat test.sh | ||
Строка 42: | Строка 42: | ||
echo "Hello, world!" | echo "Hello, world!" | ||
[root@vm-01 ~]# | [root@vm-01 ~]# | ||
+ | </syntaxhighlight> | ||
+ | Хорошим тоном считается выводить ошибки на поток ошибок (<code>STDERR</code>): | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | [root@vm-01 ~]# cat test.sh | ||
+ | #!/bin/bash | ||
+ | |||
+ | echo "Hello, world!" | ||
+ | echo "Something has happend! Can not proceed!" >&2 | ||
+ | [root@vm-01 ~]# | ||
+ | </syntaxhighlight> | ||
+ | Запустим скрипт таким образом, что бы поток ошибок направлялся в файл: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | [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 ~]# | ||
+ | </syntaxhighlight> | ||
+ | При выводе на экран, следует учесть, что некоторые символы могут иметь специальное значение, в следствие чего, использование таких | ||
+ | символов может привести к результатам отличным от ожидаемого. Например, если необходимо узнать содержимое <code>PATH</code>, то следует | ||
+ | написать так: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | [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 ~]# | ||
+ | </syntaxhighlight> | ||
+ | Если необходимо вывести именно строку $PATH, то следует использовать символы экранирования (двойные кавычки <code>""</code>, одинарные кавычки <code>''</code>, либо обратный слэш <code>\</code>): | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | [root@vm-01 ~]# cat test.sh | ||
+ | #!/bin/bash | ||
+ | |||
+ | echo "\$PATH" | ||
+ | echo '$PATH' | ||
+ | |||
+ | [root@vm-01 ~]# ./test.sh | ||
+ | $PATH | ||
+ | $PATH | ||
+ | [root@vm-01 ~]# | ||
+ | Следует заметить, что двойные кавчки экранируют не все спецсимволы, поэтому если необходимо вывести какую-либо информацию как текст, то следует использовать одинарные кавычки! | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> |
Версия 11:47, 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 ~]#
Следует заметить, что двойные кавчки экранируют не все спецсимволы, поэтому если необходимо вывести какую-либо информацию как текст, то следует использовать одинарные кавычки!