Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: /bin/bash - нужна помощь специалистов  (Прочитано 1448 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gurza_linux

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
  • гюрза
    • Просмотр профиля
всем привет,
прошу прощения, если я обращаюсь со своими проблемами не в тот раздел, но мне кажется, вопросы, которые я затрону, так или иначе связаны с программированием. у меня очень часто бывает, что я представляю алгоритм действий, но не всегда получается грамотно переложить все свои мысли на язык программирования. итак:

1. имеем переменные: var1, var2, var3, true, false
в зависимости от их значений должны выполняться определенные функции. в учебнике по шеллу расписан пример для одного условия. то есть

if
   [ "$var" = "$true" ]; then
   список команд...
fi

какова будет правильная конструкция в квадратных скобках, если мне надо проверить еще и другие переменные?
если (var1 истина) и (var2 истина) и (var3 истина)? и как правильно в этой конструкции будет "и" и "или"? (and? or?)

2. сервер имеет ip 192.168.1.2, ноутбук на котором выполняется скрипт 192.168.1.3 (локалка). если сервер не запущен, то есть его нет в сети, скрипт
запускаться не должен, пишем функцию, которая проверяет в сети сервер или нет, больше просто ничего в голову не приходит:

checkserver=$(ping -c 1 192.168.1.2 | grep packet loss)

наверное это очень примитивно. есть какая-нибудь возможность как проверить доступность сервера в сети? таким же образом можно я предполагаю проверять смонтирован ли винт, проверяем наличие /media/volume/ еще способы есть? и правильно ли поступать таким образом?
я понимаю, что вопросы глупые, но я бы не обратился сюда, если бы нашел конструктивные и понятные ответы в сети.
 

 
 
macbook pro
win7\ubuntu 12.10\mac os x 10.8.X
intel core i7, hdd 750 gb, ram 16 gb, video 1 gb

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: /bin/bash - нужна помощь специалистов
« Ответ #1 : 11 Мая 2011, 13:43:21 »
построение сложных условий проверки

-a

    логическое И (and)

    exp1 -a exp2 возвращает true, если оба выражения, и exp1, и exp2 истинны.
-o

    логическое ИЛИ (or)

    exp1 -o exp2 возвращает true, если хотябы одно из выражений, exp1 или exp2 истинно.

Они похожи на операторы Bash && и ||, употребляемые в двойных квадратных скобках.

[[ condition1 && condition2 ]]

Операторы -o и -a употребляются совместно с командой test или внутри одинарных квадратных скобок.

if [ "$exp1" -a "$exp2" ]



Чтобы увидеть эти операторы в действии, смотрите Пример 8-3 и Пример 25-11.

Это цитата из abs-guide.  Там же ищите примеры. Работу сервера можно nmap-ом проверить. Посмотреть что смонтировано можно двумя путями:
cat /etc/mtab
mount
« Последнее редактирование: 11 Мая 2011, 13:50:26 от aliftin »
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн gurza_linux

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
  • гюрза
    • Просмотр профиля
Re: /bin/bash - нужна помощь специалистов
« Ответ #2 : 11 Мая 2011, 13:49:33 »
aliftin
понятно, с этим я постараюсь разобраться.
а по поводу остальных вопросов, можете что нибудь посоветовать?
macbook pro
win7\ubuntu 12.10\mac os x 10.8.X
intel core i7, hdd 750 gb, ram 16 gb, video 1 gb

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: /bin/bash - нужна помощь специалистов
« Ответ #3 : 11 Мая 2011, 13:58:33 »
Ну вот самый простой способ проверки, смонтировано что-то в папку или нет:
#!/bin/bash

checkmount=`cat /etc/mtab | grep "/media/disk"`

if [ -z "$checkmount" ]
then
echo "Not mount"
else
i=`cat /etc/mtab | grep "/media/disk" | awk '{print $1}'`
echo ""$i" mount in /media/disk"
fi

Вот простой пример проверки работы сервера:
#!/bin/bash

checkserver=`ping -c 1 192.168.1.2 | grep loss | awk -F "," '{print $3}'`

if [ "$checkserver" = " 0% packet loss" ]
then
echo "Server on"
else
echo "Server off"
fi

Там где "Server off" можно вставить выход, а там где "Server on" запуск функции, которая к нему подключает машину. Как-то так.
« Последнее редактирование: 11 Мая 2011, 14:07:00 от aliftin »
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн gurza_linux

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
  • гюрза
    • Просмотр профиля
Re: /bin/bash - нужна помощь специалистов
« Ответ #4 : 11 Мая 2011, 14:22:02 »
круто, спасибо больше
macbook pro
win7\ubuntu 12.10\mac os x 10.8.X
intel core i7, hdd 750 gb, ram 16 gb, video 1 gb

andrey_p

  • Гость
Re: /bin/bash - нужна помощь специалистов
« Ответ #5 : 11 Мая 2011, 15:00:51 »
bash:

if [[ op1 && op2 && op3 ]]; then
...

posix shell (/bin/sh в Ubuntu):
if  test op1 -a op2 -a op3; then
...

или

if [ op1 -a op2 -a op3 ]; then
...

или

if [ op1 ] && [ op2 ] && [ op3 ]; then
...

op1 и т. д. могут быть различными операторами - от проверки разрешений файлов до различных проверок и сравнений строк и чисел - info test. "[" - это другое имя для команды "test":

% which -a [ test
[: shell built-in command
/usr/bin/[
test: shell built-in command
/usr/bin/test

 

Страница сгенерирована за 0.047 секунд. Запросов: 25.