Что такое сценарий оболочки и почему вы должны его использовать

Оболочка — это программа в операционной системе Linux или Unix, которая позволяет вводить команды для выполнения системой. Когда окно терминала открывается на компьютере с Linux, оно запускает программу оболочки, которая представляет интерфейс для ввода команд. Этот интерфейс известен как интерфейс командной строки. Когда команда вводится, она выполняется оболочкой, а вывод выводится на экран.

Помимо возможности принимать и выполнять команды в интерактивном режиме, оболочка также может выполнять команды, хранящиеся в файле. Этот способ выполнения известен как сценарии оболочки, и в этой статье мы рассмотрим основы сценариев оболочки

,

1. История раковины

Начиная с Unix в 1970-х годах, появилась программа-оболочка под названием V6 Shell разработанный Кеном Томсоном. Это была интерактивная оболочка, в которой не хватало скриптов.

Это сопровождалось Борн Шелл в 1977 году и остается в использовании сегодня в качестве оболочки по умолчанию для корень учетная запись. Эта оболочка добавила скриптовые возможности, которые оказались чрезвычайно полезными на практике в течение многих лет.

Дальнейшее развитие оболочки в 1980-х годах породило множество популярных вариантов оболочки, наиболее популярными из которых были C-Shell и Корн Шелл. У каждой из этих оболочек был свой синтаксис, который в некоторых случаях резко отличался от оригинальной оболочки.

Одна из самых популярных оболочек сегодня — это Bash Shell. Баш означает Bourne-Again-Shell и является значительно улучшенным вариантом оригинальной Bourne Shell.

В этой статье мы опишем сценарии оболочки для Bash Shell

,

2. Выполнение сценария оболочки

Как вы выполняете сценарий оболочки? Просто. Просто передайте путь сценария в качестве аргумента в оболочку:

Пример сценария оболочки:

echo "hello world"

Запустите его следующим образом:

$ bash hello.sh
# prints
hello world

Замечания: Оболочка требует, чтобы строки заканчивались символами LF (перевод строки). Если вы напишите свой сценарий оболочки в Windows и попытаетесь выполнить его непосредственно в системе Linux, вы можете столкнуться с ошибками. Windows использует комбинацию CR-LF (Carriage-Return-Line-Feed) для завершения строки. Это должно быть преобразовано только в LF. Проверьте ваш редактор Windows для способов сделать это.

Существует еще один способ выполнения сценария оболочки непосредственно в виде команды. Вставьте следующую строку (объявление hashbang) в качестве первой строки вашего сценария оболочки.

#!/bin/bash

С этим изменением наш простой сценарий оболочки теперь:

#!/bin/bash
echo "hello world"

Теперь вам нужно сделать исполняемый файл скрипта следующим образом:

$ chmod +x hello.sh

На этом этапе вы можете выполнить файл сценария напрямую, без необходимости явной ссылки на оболочку.

$ hello.sh
# prints
hello world

Давайте теперь посмотрим на некоторые преимущества использования сценариев оболочки

,

3. Автоматизация задач

Первое преимущество использования сценариев оболочки — это автоматизация часто выполняемых задач.

, Предположим, у вас есть задача, которую вы должны выполнять каждый день. Если вам нужно ежедневно выполнять несколько команд в вашей системе Linux, вы можете сохранить эти команды в файле и запустить скрипт. Примеры включают в себя:

  • Архивируйте и ежедневно загружайте файл или папку в облачное хранилище

    такие как S3.

  • Сжатие файлов журналов, которые имеют тенденцию расти каждый день.
  • Извлекайте цены на акции, анализируйте извлеченные данные и запускайте электронную почту или SMS, когда выполняются определенные условия (слишком высокие или слишком низкие цены).

4. Объединение нескольких команд

В дополнение к автоматизации частых задач, вы также можете счесть целесообразным объединить несколько последовательностей команд в одну команду. Запоминание одной команды намного проще, чем нескольких команд, не говоря уже о порядке их выполнения.

Примером может служить последовательность загрузки операционной системы Linux

сам. В процессе загрузки ОС выполняет ряд команд, чтобы привести систему в надлежащее состояние. Эти команды на самом деле являются сценариями оболочки, которые находятся в каталоге / etc. Если вы посмотрите на один из этих сценариев оболочки, вы поймете сложность загрузки системы, которую вам, возможно, пришлось бы выполнять вручную в отсутствие сценариев оболочки.

Ниже приведен пример сценария оболочки / etc / profile, который выполняется каждый раз, когда пользователь входит в систему. Представьте, что вы вводите эти команды вручную!

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi

5. Легче развивать

Внутри обычной программы, написанной на C / C ++, можно выполнять те же действия, что и сценарий оболочки. Однако гораздо проще написать и отладить сценарий оболочки, чем программу на C / C ++. Особенно для задач системного администрирования, которые включают выполнение внешних команд, создание и удаление файлов и каталогов, перенаправление вывода и т. Д.

Программы на C / C ++ лучше подходят для гораздо более низкого уровня операций, таких как вызов системных вызовов, манипулирование структурами данных и т. Д.

6. Прозрачность

Сценарий оболочки, благодаря тому, что он является текстовым файлом, может быть легко просмотрен, чтобы проверить, какие действия он выполняет. В отличие от этого, единственный способ узнать, что делает программа, написанная на таком языке, как C / C ++ (и скомпилирована в исполняемый файл), — если она решит сообщить вам или у вас есть доступ к исходному коду. Например, вы можете проверить, удаляет ли сценарий оболочки какие-либо файлы, и если вам нужны эти файлы, вы можете скопировать их в другое место.

Также гораздо проще диагностировать проблемы с помощью сценариев оболочки, а не обычных программ, поскольку вы можете посмотреть исходный код. Это сценарий сбой, потому что каталог не существует? Вы можете посмотреть в коде сценария и создать каталог (хотя сценарий оболочки с хорошим поведением должен проверить и создать его, чтобы избежать таких ошибок).

7. Портативный

Сценарий оболочки

могут быть перенесены в другие Unix и Unix-подобные операционные системы и выполнены (если присутствует сама оболочка). Даже при переносе сценария оболочки из разных архитектур, таких как x86, MIPS, Sparc и т. Д., Сценарии оболочки гораздо более переносимы, чем программы на C / C ++.

Единственный способ переноса и использования программы на C / C ++ в другой системе — это скопировать исходный код, собрать программу и попытаться запустить ее. Даже в этом случае он может работать не так, как ожидается, если он использует специфичный для архитектуры код.

Теперь, когда у вас есть представление о том, что такое сценарии оболочки и их многочисленные преимущества, не хотели бы вы использовать их для своих задач? С какими проблемами вы столкнулись при их использовании? Пожалуйста, дайте нам знать в комментариях ниже.

Ссылка на основную публикацию
Adblock
detector