Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Руководство по Bash для начинающих | ||
---|---|---|
Назад | Глава 2: Пишем и отлаживаем скрипты | Вперед |
Создание и запуск скрипта
Пишем скрипт и выбираем для него имя
Скрипт командной оболочки представляет собой последовательность команд, которую вы можете использовать многократно. Исполнение этой последовательности, как правило, осуществляется с помощью ввода в командной строке имени скрипта. Кроме того, с помощью cron вы можете использовать скрипты для автоматизации выполнения задач. Другое применение скриптов - процедура загрузки и остановки системы UNIX, когда в скриптах init определяются операции с демонами и сервисами.
Чтобы создать скрипт командной оболочки, откройте в вашем редакторе новый пустой файл. Для этого можно использовать любой текстовый редактор: vim, emacs, gedit, dtpad и т. д.; подойдет любой. Однако, вы можете выбрать более продвинутый редактор, такой как vim или emacs, поскольку такие редакторы можно настроить на распознавание синтаксиса командной оболочки и Bash и они могут оказаться хорошим подспорьем по предотвращению таких ошибок, которые часто делают новички, например, забывают закрывать скобки и ставить точки с запятой.
Подсвечивание синтаксиса в редакторе vim | |
Для того, чтобы активировать подсветку синтаксиса в редакторе vim, используйте команду :syntax enable или :sy enable или :syn enable Вы можете добавить этот параметр в файл |
Набирайте команды UNIX в новом пустом файле точно также, как если бы вы вводили их в командной строке. Как уже говорилось в предыдущей главе (смотрите раздел "Выполнение команды"), команды могут быть функциями командной оболочки, встроенными командами, командами UNIX или другими скриптами.
Выберите для вашего скрипта мнемоничное имя, которое бы говорило, что скрипт делает. Убедитесь, что имя вашего скрипта не конфликтует с существующими командами. Чтобы не возникало никакой путаницы, имена скриптов часто заканчиваются расширением .sh. Тем не менее, в вашей системе могут существовать и другие скрипты с тем же именем, которое вы выбрали. С помощью команд which, whereis и других поищите информацию об уже существующих программах и файлах в таким именем:
which -a script_name whereis script_name locate script_name(прим.пер. : вместо
script_name
укажите имя своего скрипта).
Скрипт script1.sh
В этом примере мы используем команду echo, встроенную в Bash, которая перед тем, как будут выданы выходные данные, проинформирует пользователя о том, что должно быть сделано. Настоятельно рекомендуется информировать пользователей о том, что делает скрипт с тем, чтобы пользователи не нервничали в случае, если им покажется, что скрипт ничего не делает. Мы вернемся к теме оповещения пользователей в главе 8 "Пишем интерактивный скрипт".
Рис.2.1. Скрипт script1.sh
Напишите такой же скрипт для себя. Хорошей идеей было бы создать директорий ~/scripts
, в котором будут находиться ваши скрипты. Добавьте этот директорий к содержимому переменной PATH
:
export PATH="$PATH:~/scripts"
Если вы только знакомитесь с Bash, используйте текстовый редактор, в котором для различных конструкций оболочки используются различные цвета. Подсветка синтаксиса поддерживается в vim, gvim, (x)emacs, kwrite и во многих других редакторах, смотрите документацию к вашему любимому редактору.
Различные строки приглашений | |
Строки приглашений, используемые в данном курсе, варьируются в зависимости от настроения автора. Это гораздо больше соответствует реальным жизненным ситуациям, чем стандартные строки приглашений $, используемые в учебных примерах. Единственное, чего мы будем придерживаться, это то, что строка приглашения для пользователя root будет заканчиваться символом диез (#). |
Выполнение скрипта
Для того, чтобы скрипт можно было запускать, он должен для соответствующих пользователей иметь права на запуск. После того, как вы установите права доступа, проверьте, что вы действительно установили те права, которые вам нужны. Когда это будет сделано, скрипт можно будет запускать точно также, как и любую другую команду:
willy:~/scripts> chmod u+x script1.sh willy:~/scripts> ls -l script1.sh -rwxrw-r-- 1 willy willy 456 Dec 24 17:11 script1.sh willy:~> script1.sh The script starts now. Hi, willy! I will now fetch you a list of connected users: 3:38pm up 18 days, 5:37, 4 users, load average: 0.12, 0.22, 0.15 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty2 - Sat 2pm 4:25m 0.24s 0.05s -bash willy :0 - Sat 2pm ? 0.00s ? - willy pts/3 - Sat 2pm 3:33m 36.39s 36.39s BitchX willy ir willy pts/2 - Sat 2pm 3:33m 0.13s 0.06s /usr/bin/screen I'm setting two variables now. This is a string: black And this is a number: 9 I'm giving you back your prompt now. willy:~/scripts> echo $COLOUR willy:~/scripts> echo $VALUE willy:~/scripts>
Это наиболее обычный способ выполнить скрипт. Предпочтительно выполнять скрипты, подобные этому, в подоболочке. Переменные, функции и псевдонимы, создаваемые в этой подоболочке, известны только в этой конкретной сессии bash в этой подоболочке. Когда происходит выход из этой оболочки и управление получает родительская оболочка, все настройки очищаются и будут забыты все изменения, которые были сделаны с помощью скрипта в состоянии этой оболочки.
Если вы в переменной PATH
не указали директорий scripts
или .
(текущий каталог), вы можете активировать скрипт следующим образом:
./script_name.sh
Также можно выполнить скрипт внутри имеющейся оболочки, но это обычно делается только в случае, если вы хотите получить специальные возможности, например, если нужно проверить, работает ли скрипт с другой оболочкой, или выдать трассировку с целью отладки (прим.пер. - вместо script_name
укажите имя своего скрипта ):
rbash script_name.sh sh script_name.sh bash -x script_name.sh
Указанная командная оболочка будет запущена как подоболочка вашей текущей оболочки и выполнит скрипт. Это делается, когда вы хотите, чтобы скрипт был запущен с конкретными параметрами или при определенных условиях, которые не указаны в самом скрипте.
Если вы не хотите запускать новую командную оболочку, а хотите выполнить скрипт в текущей оболочке, используйте команду source
:
source script_name.sh
source = . | |
Встроенная команда Bash source является синонимом команды . (точка), имеющейся в оболочке Bourne. |
В этом случае скрипту не нужны права на выполнение. Команды выполняются в контексте текущей оболочки, так что любые изменения, которые сделаны в вашей среде, останутся видимыми, когда скрипт закончит выполнение:
willy:~/scripts> source script1.sh --output ommitted-- willy:~/scripts> echo $VALUE 9 willy:~/scripts>
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 2: Содержание | Основы скриптов |