<Предыдущая | Содержание: | Следующая>
shift - Получение доступа ко многим аргументам
Но что происходит, когда мы даем программе большое количество аргументов, например:
[я @ linuxbox ~] $ позит-парам *
Количество аргументов: 82
$ 0 = / home / me / bin / posit-param
$ 1 = address.ldif
$ 2 = корзина
$ 3 = bookmarks.html
4 доллара = debian-500-i386-netinst.iso
5 $ = debian-500-i386-netinst.jigdo
$ 6 = debian-500-i386-netinst.template
$ 7 = debian-cd_info.tar.gz
$ 8 = Рабочий стол
$ 9 = dirlist-bin.txt
$ 8 = Рабочий стол
$ 9 = dirlist-bin.txt
В этом примере системы подстановочный знак * расширяется до 82 аргументов. Как мы можем обработать такое количество? Оболочка предоставляет способ, хотя и неуклюжий, для этого. В сдвиг команда заставляет все параметры «опускаться на один вниз» каждый раз при выполнении. Фактически, используя сдвиг, можно обойтись всего одним параметром (помимо $0, который никогда не меняется):
#! / Bin / Баш
# posit-param2: скрипт для отображения всех аргументов count = 1
а [[$ # -gt 0]]; делать
echo "Аргумент $ count = $ 1" count = $ ((count + 1))
смена сделана
#! / Bin / Баш
# posit-param2: скрипт для отображения всех аргументов count = 1
а [[$ # -gt 0]]; делать
echo "Аргумент $ count = $ 1" count = $ ((count + 1))
смена сделана
Каждый раз сдвиг выполняется, значение $2 перемещен в $1, значение $3 перемещен в $2 и так далее. Значение $# также уменьшается на единицу.
В posit-param2 В программе мы создаем цикл, который оценивает количество оставшихся аргументов и продолжается до тех пор, пока существует хотя бы один. Отображаем текущий аргумент, увеличиваем переменную считать с каждой итерацией цикла, чтобы обеспечить текущий счет количества обработанных аргументов и, наконец, выполнить сдвиг загрузить
$ 1 со следующим аргументом. Вот программа в действии:
[я @ linuxbox ~] $ posit-param2 abcd
Аргумент 1 = a Аргумент 2 = b Аргумент 3 = c Аргумент 4 = d
[я @ linuxbox ~] $ posit-param2 abcd
Аргумент 1 = a Аргумент 2 = b Аргумент 3 = c Аргумент 4 = d