|
|||||||
shift / смещение переменных на заданное число
Время создания: 31.08.2017 20:51
Текстовые метки: code
Раздел: bash - команды
Запись: xintrea/mytetra_db_mcold/master/base/1501680539pbh3721tw0/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Встроенная команда shift Что эта команда делает? Команда shift является одной из встроенных команд Bourne, которая поставляется с Bash. У этой команды есть один аргумент - число. Это число N указывает, на сколько позиций позиционные параметры смещаются влево. Позиционные параметры от N+1 до $# будут переименованы и будут иметь имена от $1 до $# - N+1. Скажем, у вас есть команда, у которой 10 аргументов, и N равен 4, тогда $5 становится $1, $6 становится $2 и так далее. $10 становится $6, а первоначальные $1, $2, $3 и $4 отбрасываются. Если N равно нулю или больше $# (общее количество аргументов, смотрите раздел "Проверка аргументов командной строки"), то позиционные параметры не изменяются и команда не действует. Если N не присутвует, то полагается, что оно равно 1. Код возврата равен нулю, если N не больше $# и не меньше нуля, в противном случае код возврата отличен от нуля. Примеры Просто проверка, демонстрирующая описанное выше: [john@fenix testdir] cat test.sh
#!/bin/bash
echo "$@"
shift 4
echo "$@"
После запуска: [john@fenix testdir] ./test.sh 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
5 6 7 8 9 10
[john@fenix testdir] ./test.sh 1 2 3
1 2 3
1 2 3
Инструкция сдвига shift обычно используется, когда количество аргументов в команде заранее неизвестно, например, когда пользователи могут указать столько аргументов, сколько захотят. В таких случаях, аргументы, как правило, обрабатываются в цикле while с проверкой условия (( $# )). Это условие является истинным, если количество аргументов больше нуля. Каждый аргумент обрабатывается с использованием переменной $1 и инструкции shift. Каждый раз, когда выполняется команда shift, количество аргументов уменьшается, и когда оно, в конечном счете, становится равным нулю, происходит выход из цикла while . В приведенном ниже примере cleanup.sh инструкция shift используется для обработки каждого файла из списка, созданного с помощью команды find: #!/bin/bash
# This script can clean up files that were last accessed over 365 days ago.
USAGE="Usage: $0 dir1 dir2 dir3 ... dirN"
if [ "$#" == "0" ]; then
echo "$USAGE"
exit 1
fi
while (( "$#" )); do
if [[ $(ls "$1") == "" ]]; then
echo "Empty directory, nothing to be done."
else
find "$1" -type f -a -atime +365 -exec rm -i {} \;
fi
shift
done
В следующем примере, мы изменили скрипт из раздела "Встраиваемые документы" так, что он может за один раз устанавливать сразу несколько пакетов: #!/bin/bash
if [ $# -lt 1 ]; then
echo "Usage: $0 package(s)"
exit 1
fi
while (($#)); do
yum install "$1" < CONFIRM
y
CONFIRM
shift
done |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|