BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: условие по результату команды
СообщениеДобавлено: Чт 01 июл, 2010 12:37 pm 
Не в сети

Зарегистрирован: Вт 04 мар, 2008 11:46 am
Сообщения: 649
приветсвую. вопрос такой.. естьу меня скрипт занимается монтирование и бекапированием.. никак не могу побороть концовку.

а в частности
обозначил переменную
Код:
mountfs='/usr/sbin/mount_smbfs -f 777 -d 777 -I 192.168.1.10 -E koi8-r:cp866 //root@QWERTY1/backups /smb/mir'


задача
если результат команды $mountfs не равен 0 (т.е. неудача) вывести мне месагу на консоль иначе (тут на самом деле условия мне не нужно, но по-моему без него никак) вывести на консоль что все хорошо

я остановился на таком корявом куске..

Код:
else
if  echo "$mountfs $? !=0"; then
        echo "error while mounting"
fi
else if echo $? =0; then
echo "all ok"
fi


прошу прощения за корявость, познавать программирование только начинаю.

Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт 01 июл, 2010 3:27 pm 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: Вт 10 авг, 2004 2:24 am
Сообщения: 3286
Откуда: Харьков
Код:
#!/bin/sh -
n="3"
t="3"
ip="217.69.128.40"
#

if ping -q -s20 -c$n -t$t $ip > /dev/null 2>&1
then
        echo ":)"
else
        echo ":("
fi


простой пример, в зависимости от пингуется\нет разные смайлики выводит

переменную же mountfs проверять неверно, так как она будет содержать вывод выполненной комманды, а не код результата выполнения


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт 01 июл, 2010 9:51 pm 
Не в сети

Зарегистрирован: Вт 04 мар, 2008 11:46 am
Сообщения: 649
ну как раз на уровне if ..then..else мне все понятно! у меня несколько сложнее получается ))
смотри весь код. а вопрос в первом посте..

Код:
mountfs='/usr/sbin/mount_smbfs -f 777 -d 777 -I 192.168.1.10 -E koi8-r:cp866 //root@QWERTY1/backups /smb/mir'

if [ -d /smb/mir/mysql ]; then

    mkdir /smb/mir/mysql
    find /backup/mysql -mtime +7|xargs rm -fv
    find /smb/mir/mysql -mtime +7|xargs rm -fv
    cp -v /backup/*.gz /smb/mir
    cp -vRp /backup/mysql/* /smb/mir/mysql
#    $process

elif [ -d /smb/mir]  != 0; then

    $mountfs

    mkdir /smb/mir/mysql
    find /backup/mysql -mtime +7|xargs rm -fv
    find /smb/mir/mysql -mtime +7|xargs rm -fv
    cp -v /backup/*.gz /smb/mir
    cp -vRp /backup/mysql/* /smb/mir/mysql

#    $process

elif echo "$mountfs $? !=0"; then
    echo "error while mounting"
fi

else if echo $? =0; then
echo "all ok"
fi


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт 01 июл, 2010 11:11 pm 
Не в сети

Зарегистрирован: Вт 20 дек, 2005 11:07 am
Сообщения: 370
Откуда: Uzhgorod
Код:
#!/bin/sh
MyCopy()
{
   mkdir /smb/mir/mysql
    find /backup/mysql -mtime +7|xargs rm -fv
    find /smb/mir/mysql -mtime +7|xargs rm -fv
    cp -v /backup/*.gz /smb/mir
    cp -vRp /backup/mysql/* /smb/mir/mysql
}

/usr/sbin/mount_smbfs -f 777 -d 777 -I 192.168.1.10 -E koi8-r:cp866 //root@QWERTY1/backups /smb/mir && MyCopy


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 02 июл, 2010 12:06 am 
Не в сети

Зарегистрирован: Вт 04 мар, 2008 11:46 am
Сообщения: 649
давайте не будем ругатся, а ответ на мой вопрос у кого-то есть ?))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 02 июл, 2010 12:11 am 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5195
Откуда: Москва
ваше
Код:
elif echo "$mountfs $? !=0"; then

работать не будет, потому что это ерунда.
echo выведет команду и вернет 0, ничего смонтировано не будет.
Как уже было сказано, в условие if просто вставляется команда, явно сравнивать $? никогда не надо.

Код:
if $mountfs; then
    echo "Mounted successfully"
else
    echo "Cannot mount"
fi


[ - тоже комманда, и сравнения могут быть только в ней, поэтому

не
Код:
elif [ -d /smb/mir]  != 0

а
Код:
elif [ ! -d /smb/mir ]
или там
[ "$boo" = "bar" ]
[ "$year" -lt 2010 ]
не забывайте про проблел перед ].

В конце нужно два fi, потому что у вас вложенные if.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 09 июл, 2010 12:55 pm 
Не в сети

Зарегистрирован: Вт 04 мар, 2008 11:46 am
Сообщения: 649
да да, спасибо! ктобы мог подумать что там можно использовать !

остановился на

Код:
#!/usr/local/bin/bash

mfs='/usr/sbin/mount_smbfs -f 777 -d 777 -I 192.168.1.10 -E koi8-r:cp866 //root@QWERTY1/backups /smb/mir'


if  [ ! -e /smb/mir/mounted ]; then

    ${mfs}

        if [ ! -e /smb/mir/mounted ]; then
              exit 0
        fi
fi
    mkdir /smb/mir/mysql
    find /backup/mysql -mtime +7|xargs rm -fv
    find /smb/mir/mysql -mtime +7|xargs rm -fv
    cp -v /backup/*.gz /smb/mir
    cp -vRp /backup/mysql/* /smb/mir/mysql
    echo "all ok"


но хотелось бы ещё более украсить
вот только не пойму как присвоить переменной многострочное значение..
никак не выгуглю синтаксис..

process=mkdir /smb/mir/mysql
find /backup/mysql -mtime +7|xargs rm -fv
find /smb/mir/mysql -mtime +7|xargs rm -fv
cp -v /backup/*.gz /smb/mir
cp -vRp /backup/mysql/* /smb/mir/mysql
echo "all ok"

пробовал уже и ' и " и && и \n
все не то.. подскажите пожалуйста?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 09 июл, 2010 1:44 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5195
Откуда: Москва
emoxam писал(а):
Код:
#!/usr/local/bin/bash

mfs='/usr/sbin/mount_smbfs -f 777 -d 777 -I 192.168.1.10 -E koi8-r:cp866 //root@QWERTY1/backups /smb/mir'


if  [ ! -e /smb/mir/mounted ]; then

    ${mfs}

        if [ ! -e /smb/mir/mounted ]; then
              exit 0
        fi
fi

Код:
#!/bin/sh

if mount | grep -q 'on /smb/mir'; then
  exit 0
fi

if ! /usr/sbin/mount_smbfs -f 777 -d 777 -I 192.168.1.10 -E koi8-r:cp866 //root@QWERTY1/backups /smb/mir; then
  echo "Cannot mount"
  exit 1
fi
...

Что вы там собрались украшать и зачем многострочные переменные не понятно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 09 июл, 2010 2:40 pm 
Не в сети

Зарегистрирован: Вт 04 мар, 2008 11:46 am
Сообщения: 649
примонтировали - шикарно! а то ради чего все затевается?

Код:
mkdir /smb/mir/mysql
find /backup/mysql -mtime +7|xargs rm -fv
find /smb/mir/mysql -mtime +7|xargs rm -fv
cp -v /backup/*.gz /smb/mir
cp -vRp /backup/mysql/* /smb/mir/mysql
echo "all ok"


и что не понятно ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 09 июл, 2010 4:23 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5195
Откуда: Москва
Непонятно что вы еще хотите. Приведенный код не работает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 09 июл, 2010 8:39 pm 
Не в сети

Зарегистрирован: Вт 04 мар, 2008 11:46 am
Сообщения: 649
работает и тот что написал я.
ок
если внимательно посмотреть на

Код:
mkdir /smb/mir/mysql
find /backup/mysql -mtime +7|xargs rm -fv
find /smb/mir/mysql -mtime +7|xargs rm -fv
cp -v /backup/*.gz /smb/mir
cp -vRp /backup/mysql/* /smb/mir/mysql
echo "all ok"


то понятно что скрипт помимо монтрования занимается ещё и удалением и копированием

возникло желание, чтобы если вдруг мне придется использовать этот или подобный кусок в скрипте несколько раз писать его целиком не "наш метод". и появилась мысль объявить переменную значение который было бы равно этом куску. если бы кусок был бы однострочный то проблем нет. это видно по моему скрипту. но если кусок многострочный то корректно объявить переменную не получается. синтаксис выгуглить не могу.

если кусок был бы односрочный то получилось бы что-то типа

peremenaya='find /backup/mysql -mtime +7|xargs rm -fv'

а если кусок содержит две строки и более ? как поступить ?

как рассказать ещё подрбнее я не знаю. может поможет перечитка этой темы...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 09 июл, 2010 9:09 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5195
Откуда: Москва
Все-таки надо прочитать самый что ни на есть минимальный howto по шеллу или хотя бы другие скрипты просмотреть.

Код:
backup_mysql_data() {
  mkdir /smb/mir/mysql
  find /backup/mysql -mtime +7|xargs rm -fv
  find /smb/mir/mysql -mtime +7|xargs rm -fv
  cp -v /backup/*.gz /smb/mir
  cp -vRp /backup/mysql/* /smb/mir/mysql
  echo "all ok"
}

backup_mysql_data


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 09 июл, 2010 10:55 pm 
Не в сети

Зарегистрирован: Вт 04 мар, 2008 11:46 am
Сообщения: 649
проще всего обидеть человека вместо того чтобы дать пруфлинк. уже после можно говорить гадости. но в любом случае конечно же спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб 10 июл, 2010 12:24 am 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5195
Откуда: Москва
Пруфлинк на что? И обидного я вообще-то ничего не сказал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн 12 июл, 2010 12:30 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 23 янв, 2004 1:07 pm
Сообщения: 581
Откуда: Yaroslavl
AMDmi3 писал(а):
Все-таки надо прочитать самый что ни на есть минимальный howto по шеллу или хотя бы другие скрипты просмотреть....

Паскаль надо хотя бы выучить, а потом уже всё остальное.

_________________
Я одну мечту скрывая нежу
Что я сердцем чист
Но и я кого нибудь зарежу
Под осенний свист


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика