Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 317


do PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}" # ==> Хитро, хитро....

# ==> Начнем с самых внутренних скобок... # ==> ${#MATRIX} -- возвращает длину массива MATRIX.

# ==> $RANDOM%${#MATRIX} -- возвращает случайное число # ==> в диапазоне 1 .. ДЛИНА_МАССИВА(MATRIX) - 1.

# ==> ${MATRIX:$(($RANDOM%${#MATRIX})):1} # ==> возвращает символ из MATRIX, из случайной позиции (найденной выше). # ==> См. подстановку параметров {var:pos:len} в Разделе 3.3.1 # ==> и примеры в этом разделе.

# ==> PASS=... -- добавление символа к строке PASS, полученной на предыдущих итерациях.

# ==> Чтобы детальнее проследить ход работы цикла, раскомментируйте следующую строку # ==> echo "$PASS" # ==> Вы увидите, как на каждом проходе цикла, # ==> к строке PASS добавляется по одному символу.

let n+=1 # ==> Увеличить 'n' перед началом следующей итерации. done

echo "$PASS" # ==> Или перенаправьте в файл, если пожелаете.

exit 0

+

James R. Van Zandt предоставил следующий сценарий, который демонстрирует применение именованных каналов, по его словам, "на самом деле -- упражнение на применение кавычек и на экранирование".

Пример A-17. fifo: Создание резервных копий с помощью именованных каналов

#!/bin/bash # ==> Автор:James R. Van Zandt # ==> используется с его разрешения.

# ==> Комментарии, добавленные автором документа.

HERE=`uname -n` # ==> hostname THERE=bilbo echo "начало создания резервной копии на $THERE, за `date +%r`" # ==> `date +%r` возвращает время в 12-ти часовом формате, т.е. "08:08:34 PM".

# убедиться в том, что /pipe -- это действительно канал, а не простой файл rm -rf /pipe mkfifo /pipe # ==> Создание "именованного канала", с именем "/pipe".

# ==> 'su xyz' -- запускает команду от имени порльзователя "xyz". # ==> 'ssh' -- вызов secure shell (вход на удаленную систему). su xyz -c "ssh $THERE \"cat >/home/xyz/backup/${HERE}-daily.tar.gz\" < /pipe"& cd / tar -czf - bin boot dev etc home info lib man root sbin share usr var >/pipe # ==> Именованный канал /pipe, используется для передачи данных между процессами: # ==> 'tar/gzip' пишет в /pipe, а 'ssh' -- читает из /pipe.




Содержание  Назад  Вперед