ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Использование команды shift в bash

Bash Heredoc

Когда аргументы командной строки принимают входные данные от пользователя, первый аргумент содержит имя сценария. Иногда в целях программирования требуется опустить имя сценария. Эту задачу легко выполнить, используя любой цикл в bash. Другой способ выполнить эту задачу – использовать команду shift . Эта команда используется для перемещения одного позиционного параметра влево по умолчанию. Различные виды использования команды shift  в Баш было показано в этой статье.

 

Синтаксис:

Синтаксис команды `shift` приведен ниже. У этой команды есть один необязательный аргумент, который используется для установки количества позиций, которые будут смещены влево. Аргумент должен быть положительным. Если значение аргумента установлено на 0, то ни один аргумент командной строки не будет сдвинут. Если аргумент не используется, то по умолчанию будет сдвинут один аргумент командной строки.

shift [n]

Пример-1: Распечатать все значения аргументов командной строки

Создайте файл bash со следующим сценарием, чтобы распечатать значения аргументов командной строки, используя цикл for без команды shift и цикл while с командой shift. Значение каждого аргумента будет сохранено в переменной, значение при выполнении цикла for , и эта переменная будет напечатана позже. Начали переменный используются в то время как и цикл, чтобы прочитать каждое значение аргумента при помощи команды shift и завершают цикл, когда все аргументы командной строки печатается. Переменная счетчика i, была использована в сценарии для отображения номера аргумента. Если во время выполнения не указан аргумент командной строки, то для первого аргумента будет установлена ​​пустая строка, и ничего не будет напечатано.

#! /bin/bash
# Печатать значения аргументов командной строки, используя цикл for и while
# Установить счетчик
i=1
echo "Значения аргументов без команды shift:"
# Повторите все значения, используя цикл for
for value in"$@"
do
echo "Аргумента нет. $i = $value"
((i++))
done

# Повторная инициализация счетчика
i=1
# Установите необязательный аргумент
start=${1:-""}

echo "Значения аргументов с помощью команды shift:"
# Повторите все значения, используя цикл while
while [ "$start" != "" ];
do
echo "Argument no. $i = $start"
# Сдвиньте каждый аргумент на 1
shift
start=$1
((i++))
done

Вывод:

Согласно следующему выводу, указанный выше сценарий был выполнен с тремя значениями аргументов командной строки. Значения аргументов напечатаны два раза , используя для цикла и во время цикла с командой shift.

 

Пример-2: Распечатать значения аргументов четной позиции

В предыдущем примере с командой shift не использовался аргумент , а значение аргумента было сдвинуто на 1 влево. Использование дополнительного аргумента с командой shift показано в этом примере. Создайте файл bash со следующим сценарием, чтобы распечатать значения аргументов командной строки для четной позиции. Общее количество аргументов командной строки , которые подсчитываются и хранятся в переменной общей сложности, и она была использована в то время как петли для итерации цикла. Команда shift была использована со значением аргумента 2, чтобы сдвинуть два аргумента командной строки в каждой итерации цикла. Каждый аргумент командной строки четных позиций будет напечатан с пробелом после выполнения скрипта.

#!/bin/bash

# Подсчитайте общее количество аргументов командной строки
total=$#
echo "Итого аргументы таковы: $total"

echo "Значения аргументов четной позиции являются:"
while [ $total -ge0 ];
do
# Выведите значение аргумента с пробелом
echo -n $1 " "
# Сдвиньте два аргумента
shift 2
# Уменьшите счетчик на 2
((total=$total-2))
done

# Добавить новую линию
echo

Вывод:

Согласно следующему выводу, указанный выше сценарий выполнил шесть значений аргументов командной строки без имени сценария. После печати значения 89 следующее значение четной позиции – 34, а следующее значение четной позиции – 12.

 

Пример-3: Прочтите конкретные значения конкретных аргументов

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

#!/bin/bash

# Подсчитайте общее количество аргументов командной строки
total=$#

# Проверьте, заданы ли значения 6 аргументов или нет
if [ $total -lt6 ]; then
echo "Недопустимое количество аргументов."
else
# Сдвиньте один аргумент
shift 1
# Считайте значение имени хоста
hostname=$1
# Сдвиньте два аргумента
shift 2
# Прочитайте значение имени пользователя
username=$1
# Сдвиньте два аргумента
shift 2
# Считайте значение пароля
password=$1
fi

# Проверьте значения для проверки подлинности
if [[ $hostname == "localhost"&& $username == "andreyex"&& $password == "12345" ]]; then
echo "Аутентификация прошла успешно."
else
echo "Аутентификация не удалась."
fi

Вывод:

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

 

Заключение:

Команда shift – очень полезная команда для чтения определенных значений аргументов командной строки. В этой статье описаны различные варианты использования этой команды с использованием нескольких примеров, чтобы помочь читателям понять цель использования этой команды в сценарии bash.

Exit mobile version