Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества? Помогите нам с документацией!
0 Пользователей и 1 Гость просматривают эту тему.
что значит защитить?
try - except это же обработчик исключений/ошибок
try(опасный оператор)except end
аналога в баш нет, нужно добавлять различные условия
кстати вотhttp://linuxgazette.net/109/park.htmlавтор реализовал в баше обработчик ошибок
но мое личное мнение, лучше использовать python....
Именно так. В простейшем случаеКод: [Выделить]try(опасный оператор)except endт.е. без обработчика исключения, просто тихо-мирно переходит к следующему оператору.
#!/bin/bashecho "123"cat /non-existent/fileecho "456"
123cat: /non-existent/file: Нет такого файла или каталога456
Так ведь баш так и работает по умолчанию.Код: [Выделить]#!/bin/bashecho "123"cat /non-existent/fileecho "456"
Че-то у меня ошибка с rsync в скрипте (нарвавшись на какой-то файл, недоступный из-за лока на Windows-машине) приводит к прерыванию скрипта.
Покажите чтоли скрипт.
#!/bin/bash -e# скрипт резевного копирования домашних каталогов всех указанных хостов, а так же общей папки xls на локальном винчестере и баз 1С на одной из Windows-машин# запускается от root (из cron)# скрипт подсоединятеся по ssh к машинам в сети, которые он смог пропинговать, и зеркалирует папку /home (для Linux-машин) и User(для Windows-машин)# для преодоления проблемы запроса пароля при логине авторизация реализована по ключам (для Linux)# для работы с Windows-машинами на них установлен DeltaCopy## для вывода на экран в процессе работы запускать с параметром 1v=''if [ $1 -eq 1 ]; then v='-h --progress' ; fi# хосты (сетевые имена), требующие резервного копирования# Linixhostsnames[0]='iskander-desktop'hostsnames[1]='irina-desktop'hostsnames[2]='kozionov-desktop'hostsnames[3]='ravil-desktop'hostsnames[4]='gulnaz-desktop'hostsnames[5]='ns1'hostsnames[6]='camera-pictures'hostsnames[7]='artem-dt-old'hostsnames[8]='www'# Windowshostsnames[9]='vladimir'hostsnames[10]='aelita'hostsnames[11]='rustem'hostsnames[12]='artem-xp'hostsnames[13]='gazizan-desktop'# хост является Linux (1)- или Windows (0)-машиной. Индексы соответстуют массиву hostsnames. Имитация многомерного массиваlinuxhost[0]=1linuxhost[1]=1linuxhost[2]=1linuxhost[3]=1linuxhost[4]=1linuxhost[5]=1linuxhost[6]=1linuxhost[7]=1linuxhost[8]=1linuxhost[9]=0linuxhost[10]=0linuxhost[11]=0linuxhost[12]=0linuxhost[13]=0# размер массиваar_dim=${#hostsnames[@]}# дата следующего пробуждения хостов для бакапа#wake_data=$(date '+%s' -d ' + 1 day'02:05)# файл логаlog='/var/log/rsync.log'echo $(date)>>$log# копируем самый главный каталог на локальном винчестере - xlsecho 'копирование папки xls'>>$logrsync $v -rztplog --exclude-from=/home/rust/rsync_exclude --delete --log-file=$log /media/xls/ /media/backup/rsync/xls# копируем домашний каталог на локальном винчестереecho 'копирование домашнего каталога сервера'>>$logif [ $1 -eq 1 ]; then echo 'копирование домашнего каталога сервера' ; firsync $v -rztplog --exclude-from=/home/rust/rsync_exclude --delete --log-file=$log /home /media/backup/rsync/server# цикл по всем хостам с проверкой доступности (через ping)full_c=0c=0# имена ответивших на ping хостов заносим в массив livehostswhile [ $full_c -lt $ar_dim ]do if eval "ping -c 1 ${hostsnames[full_c]}>/dev/null" ; then livehosts[$c]=${hostsnames[full_c]} livelinux[$c]=${linuxhost[full_c]} let "c+=1" fi let "full_c+=1"donework_c=0echo 'копирование с подключенных хостов'>>$logif [ $1 -eq 1 ]; then echo 'копирование с подключенных хостов' ; fi# цикл резевного копирования по ответившим хостамwhile [ ! $work_c -eq $c ]do echo "хост ${livehosts[$work_c]}">>$log if [ $1 -eq 1 ]; then echo "хост ${livehosts[$work_c]}" ; fi if [ ${livelinux[$work_c]} -eq 1 ]; then # бакапим Linux-машину rsync $v -rztplog --exclude-from=/home/rust/rsync_exclude --delete --log-file=$log ${livehosts[$work_c]}:/home :/etc /media/backup/rsync/${livehosts[$work_c]} # переустанавливаем "будильник" и выключаем хост if [ ${livehosts[$work_c]} = 'www' ]; then let "work_c+=1"; continue; fi # там старое ядро ssh ${livehosts[$work_c]} "echo 0 > /sys/class/rtc/rtc0/wakealarm" ssh ${livehosts[$work_c]} "echo `date '+%s' -d ' + 1 day'02:15` > /sys/class/rtc/rtc0/wakealarm" if ! eval "cat livehosts|grep ${livehosts[$work_c]}>/dev/null"; then ssh ${livehosts[$work_c]} poweroff; fi fi if [ ${livelinux[$work_c]} -eq 0 ]; then # бакапим Windows-машину rsync $v -rztplog --exclude-from=/home/rust/rsync_exclude --delete --log-file=$log --iconv=utf8 ${livehosts[$work_c]}::User/ /media/backup/rsync/${livehosts[$work_c]}/User # особая машина; копируем 1С if [ ${livehosts["$work_c"]}="vladimir" ]; then # тут базы 1С echo '1C'>>$log rsync $v -rztplog --exclude-from=/home/rust/rsync_exclude --delete --log-file=$log --iconv=utf8 ${livehosts[$work_c]}::1C/ /media/backup/rsync/vladimir/1C fi fi let "work_c+=1"doneecho 'закончили'>>$log
Код: [Выделить]#!/bin/bash -e
#!/bin/bash -e
-e уберите.
Если bash запускать с опцией -e или выполнять в скрипте set -e, то после первой же команды с ненулевым статусом возврата произойдет выход из скрипта.
Страница сгенерирована за 0.067 секунд. Запросов: 21.