Скрипты на bash — Пример скрипта с параметрами.
Роясь на просторах винта нашёл один старый скриптик. писался он во времена, когда я не признавал ничего кроме fluxbox и консоли. Основное назначение - запись дисков из консоли. Но это не важно.
Вспомнился мне этот скрипт, когда его у себя нашёл потому, что из-за способа обработки парметров, принимаемых скриптом(т.е. -h - помощь, -d - директория и т.д.) пришлось как-то поковырять документацию. В принципе, ничего сложного и всё максимально упрощено, но может кому и пригодится подход.
В самом скрипе используется два подхода - приём команды и приём опций. Ну и плюс для совсем уж новичков - работа с функциями.
P.S. Если вдруг кто захочет использовать этот скрипт в реальной жизни, он не умеет писать dvd(man cdrecord). Просто у меня в те времена не было пишущего dvd. :)
Вспомнился мне этот скрипт, когда его у себя нашёл потому, что из-за способа обработки парметров, принимаемых скриптом(т.е. -h - помощь, -d - директория и т.д.) пришлось как-то поковырять документацию. В принципе, ничего сложного и всё максимально упрощено, но может кому и пригодится подход.
В самом скрипе используется два подхода - приём команды и приём опций. Ну и плюс для совсем уж новичков - работа с функциями.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
#!/bin/bash # TMPFILE=/home/cppmm/wtmp/cdrom.iso # Определение действия. case $1 in wr) FUNC="f_write" ;; cp) FUNC="f_copy" ;; cl) FUNC="f_clear" ;; ch) FUNC="f_check" ;; wi) FUNC="f_write_iso" ;; help) FUNC="f_help" ;; *) FUNC="f_help" ;; esac shift # Определение параметров. until [ -z $1 ] do if [ "$1" = "-d" ] then DIR="$2" shift fi if [ "$1" = "-s" ] then SPEED="$2" shift fi if [ "$1" = "-o" ] then ODISK="$2" shift fi if [ "$1" = "-i" ] then IDISK="$2" shift fi if [ "$1" = "-f" ] then ISO="$2" shift fi shift done # Функйия проверки наличия переменных и оповещения. f_var_check() { case "$1" in v_help) echo "Для справки: cd.sh help" exit 0 ;; v_dir) if [ -z "$DIR" ] then echo "Нужно указать директорию, подготовленную для записи." f_var_check v_help fi ;; v_odisk) if [ -z "$ODISK" ] then echo "Нужно указать устройство, производящее запись." f_var_check v_help fi ;; v_idisk) if [ -z "$IDISK" ] then echo "Нужно указать устройство, с которого производится копирование." f_var_check v_help fi ;; v_speed) if [ -z "$SPEED" ] then SPEED="4" echo "Скорость записи не установленна. По-умолчанию 4" echo "Продолжить? [Y/n]: " read ANSWER case $ANSWER in [nN]) f_var_check v_help ;; *) ;; esac fi ;; v_eject) eject -r /dev/${ODISK} echo "Вставьте записываемый диск и нажмите Enter." read ready eject -t /dev/${ODISK} ;; v_iso) if [ -z "$ISO" ] then echo "Укажите файл образа." f_var_check v_help fi ;; esac } # Функция записи дирректории на диск. f_write() { f_var_check v_odisk f_var_check v_dir f_var_check v_speed mkisofs -V "Disk" -l -J -R -v -o ${TMPFILE} ${DIR} f_var_check v_eject cdrecord -v -dev=/dev/${ODISK} -speed=${SPEED} ${TMPFILE} rm -f ${TMPFILE} } # Функция копирования диска. f_copy() { f_var_check v_odisk f_var_check v_idisk f_var_check v_speed dd if=/dev/${IDISK} of=${TMPFILE} bs=2048 f_var_check v_eject cdrecord -v -dev=/dev/${ODISK} -speed=${SPEED} ${TMPFILE} rm -f ${TMPFILE} } # Функция очистки диска. f_clear() { f_var_check v_odisk cdrecord dev=/dev/${ODISK} -blank=all } # Функция проверки размера будующего образа. f_check() { f_var_check v_dir echo "Размерв байтах:" expr `mkisofs -print-size -quiet $DIR` \* 2084 } # Функция записи iso-образа. f_write_iso() { f_var_check v_odisk f_var_check v_iso f_var_check v_speed cdrecord -v -dev=/dev/${ODISK} -speed=${SPEED} ${ISO} } # Функция помощи. f_help() { echo " Использование: cd.sh ДЕЙСТВИЕ ОПЦИИ" echo " Действия:" echo " wr запись директории на диск." echo " cp копирование с диска на диск." echo " cl очистка диска." echo " ch проверка размера будущего образа диска из директории." echo " wi запись на диск образа." echo " Опции:" echo " -d Директория, подготовленная для записи." echo " -f Файл ISO." echo " -i Исходный диск." echo " -o Диск, подготовленный для записи." echo " -s Скорость записи." } $FUNC |
P.S. Если вдруг кто захочет использовать этот скрипт в реальной жизни, он не умеет писать dvd(man cdrecord). Просто у меня в те времена не было пишущего dvd. :)