Сценарии оболочки — команда Set

Опубликовано: 30 Сентября, 2022

В этой статье мы увидим команду SET в сценариях bash.

Команда Set: используется для установки или снятия определенных флагов и настроек (определяет поведение скрипта и помогает выполнять задачи без каких-либо проблем) внутри среды оболочки. Его можно использовать для изменения или отображения атрибутов и параметров оболочки.

Синтаксис:

set -options arguments

Команда set поддерживает следующие параметры:

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

Он помещает все аргументы присваивания в переменную окружения команды.

Исключение: исключаются все аргументы, которые предшествуют имени команды.

Это позволяет контролировать работу
Он используется для чтения команд.
Он используется для именования опции
-п

Он отключает обработку файла $ENV, а также импортирует функции оболочки.

Включается: когда реальный и эффективный идентификаторы пользователей не совпадают.

Он используется для выхода из команды после выполнения одной команды
Он рассматривает неустановленную переменную как ошибку во время подстановки.
-v Он печатает строки ввода оболочки
-Икс Он печатает команды и их аргументы в той же последовательности, в которой они были выполнены.
Он выполняет расширение Brace оболочкой
Он запрещает перезапись существующих обычных файлов.
используется, когда функции оболочки наследуют ловушку ERR
-ЧАС Это позволяет подменять историю стилей. Он включен по умолчанию.
используется, когда во время выполнения команды мы не хотим переходить по символическим ссылкам.
установите этот флаг, это поможет функциям оболочки наследовать ловушку DEBUG

Для демонстрации использования команды set давайте воспользуемся какой-нибудь командой set.

Установить команду -x

Эта опция печатает команды в той последовательности, в которой они были выполнены, или в основном используется для отладки скриптов.

Код:

set -x
echo Hello
echo Romy

Выход:

bar
hello
Romy
+ echo bar
+ echo hello
+ echo Romy

Мы можем видеть, что команды печатаются после выполнения команды со знаком «+».

Установить команду -e

Он прекращает выполнение при возникновении ошибки.

Код: (без набора -e)

echo Hello
foo
echo Romy

Выход:

Hello
Romy
main.sh: line 14: foo: command not found

«foo» — несуществующая команда, но bash все же выполнил третью строку после обнаружения ошибки во второй строке. Мы можем использовать команду set, чтобы остановить прерывание.

Код: (с набором -e)

set -e
echo Hello
foo
echo Romy

Выход:

Hello
main.sh: line 15: foo: command not found

Мы видим, что третья строка не печатается, так как выполнение было прекращено после второй строки.

Передаваемые команды

Команда set -e не работает с конвейерными командами.

Пример:

set -e
foo | echo " This is the piped command"
echo "executed"

Выход:

 This is the piped command
executed
main.sh: line 3: foo: command not found

Мы видим, что третья строка выполняется, а не завершает выполнение после второй строки.

Чтобы решить эту проблему, мы должны использовать «set -eo pipefail».

Установить -eo pipefail

Пример:

set -eo pipefail

foo | echo " This is the piped command"

echo "executed"

Выход:

 This is the piped command
main.sh: line 13: foo: command not found

Установите позиционные параметры с помощью команды set

Его можно использовать для присвоения значений позиционным параметрам. Позиция значения, указанного как ${N}, где N обозначает позицию параметра.

$1 — это первый позиционный параметр после команды. Значение $2 является вторым параметром и так далее.

Пример:

set apple mango orange guava
echo $1
echo $2
echo $3
echo $4

Выход:

apple
mango
orange
guava

Сбросить позиционные параметры

Чтобы сбросить позиционный параметр, запустите команду set, за которой следуют два дефиса (set –).

Пример:

set apple mango orange guava

set --
echo $1
echo $2

echo "Hello"

Выход:

Hello

Мы видим, что ничего не печатается в соответствии с первыми двумя командами для печати позиционных параметров.