February 17

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

Это перевод оригинальной статьи Use of shift command in Linux.

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

Команда shift в Linux — это встроенная команда используемая в shell-скриптах для управления позиционными параметрами (аргументами, переданными скрипту или функции). Она сдвигает позиционные параметры влево, фактически переназначая их: первый параметр ($1) отбрасывается, а оставшиеся параметры ($2, $3 и т. д.) сдвигаются на одну позицию вниз. Это полезно для итеративной обработки аргументов командной строки.

shift [n]
  • n (необязательный параметр): Количество позиций для сдвига. По умолчанию равно 1, если не указано.

Как это работает

  • Позиционные параметры — это переменные, такие как $1, $2, $3 и т. д., представляющие аргументы, передаваемые скрипту или функции.
  • Команда shift переименовывает эти параметры:
  1. После выполнения shift значение $2 становится $1
  2. Исходное значение $1 безвозвратно отбрасывается.
  • Общее количество параметров ($#) уменьшается на число выполненных сдвигов.
  • $0 (имя скрипта или функции) остается без изменений.

Примеры

  1. Базовый сдвиг (сдвиг на 1)
#!/bin/bash
echo "First argument: $1"
shift
echo "New first argument: $1"

Если вы запустите ./script.sh apple banana orange:

  • Вывод:
First argument: apple 
New first argument: banana
  • Пояснение: команда shift отбрасывает apple, в результате banana становится новым $1

2. Сдвиг с указанием количества позиций

#!/bin/bash
echo "All arguments: $@"
shift 2
echo "After shifting 2 positions: $@"

Если вы запустите ./script.sh one two three four:

  • Вывод:
All arguments: one two three four 
After shifting 2 positions: three four
  • Пояснение: Команда shift 2 отбрасывает one и two, поэтому $1 становится three, а $2four

3. Перебор аргументов в цикле

#!/bin/bash
while [ $# -gt 0 ]; do
    echo "Processing argument: $1"
    shift
done

Если вы запустите ./script.sh cat dog bird:

  • Вывод:
Processing argument: cat 
Processing argument: dog 
Processing argument: bird
  • Пояснение: Команда shift используется для последовательной обработки каждого аргумента до тех пор, пока аргументы не закончатся (когда $# становится равным 0).

4. Обработка параметров со значениями

#!/bin/bash
while [ $# -gt 0 ]; do
    case "$1" in
        -n)
            shift
            name="$1"
            echo "Name is: $name"
            ;;
        *)
            echo "Unknown option: $1"
            ;;
    esac
    shift
done

Если вы запустите ./script.sh -n Alice bob:

  • Вывод:
Name is: Alice 
Unknown option: bob
  • Пояснение: Команда shift используется для доступа к значению (Alice), следующему после опции -n, сдвига за пределы флага опции.

Типичные сценарии использования

  • Анализ аргументов командной строки: параметры обработки и их значения в скриптах (например, -f filename).
  • Итерация по аргументам: обработка переменного числа аргументов в цикле.
  • Упрощение скриптов: позволяет избежать ручного отслеживания индексов аргументов.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.