Ошибка при выполнении скрипта

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
J.Korvin
сержант
Сообщения: 232
Зарегистрирован: 2008-11-22 12:03:41

Ошибка при выполнении скрипта

Непрочитанное сообщение J.Korvin » 2009-03-17 20:54:03

Вот хочу чтобы проверяло существут процес или нет?
А врезультате выполнения ошибка хотя процес существует.
Когда /usr/local/bin/bash то всё работает

Код: Выделить всё

[: 61970: unexpected operator
DOWN

Код: Выделить всё

!/bin/sh

if  [[ `ps aux|grep natd|grep -v "grep"|awk '{print $2}'` ]]; then
    echo "OK"
else
    echo "DOWN"
fi
Эсли ты с ножом значит ты с мясом.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение zg » 2009-03-17 21:18:12

скобка это команда, а не конструкция

Код: Выделить всё

zg# which [
/bin/[
zg#
как и любую другую команду её надо указывать только один раз

а вообще есть pgrep

Код: Выделить всё

zg# pgrep init
1
zg# pgrep inet
zg#

Аватара пользователя
J.Korvin
сержант
Сообщения: 232
Зарегистрирован: 2008-11-22 12:03:41

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение J.Korvin » 2009-03-17 21:20:47

zg писал(а):скобка это команда, а не конструкция

Код: Выделить всё

zg# which [
/bin/[
zg#
как и любую другую команду её надо указывать только один раз

а вообще есть pgrep

Код: Выделить всё

zg# pgrep init
1
zg# pgrep inet
zg#
А почемуже вот так работает ?? ;-)

Код: Выделить всё

#!/usr/local/bin/bash

if [[ `ps aux|grep apache2|grep -v "grep"|awk '{print $2}'` ]]; then
echo "OK"
else
echo "DOWN"
fi
Эсли ты с ножом значит ты с мясом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение zg » 2009-03-17 21:25:47

J.Korvin писал(а):А почемуже вот так работает ?? ;-)
потому что надо уметь читать ;-) например man sh и man bash

Аватара пользователя
J.Korvin
сержант
Сообщения: 232
Зарегистрирован: 2008-11-22 12:03:41

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение J.Korvin » 2009-03-17 21:27:44

zg писал(а):
J.Korvin писал(а):А почемуже вот так работает ?? ;-)
потому что надо уметь читать ;-) например man sh и man bash
Спасибо, я и сам про маны знаю я просил указать ошибку а не преподавать мне!!
Эсли ты с ножом значит ты с мясом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение zg » 2009-03-17 21:29:30

J.Korvin писал(а):Спасибо, я и сам про маны знаю я просил указать ошибку а не преподавать мне!!
этого не достаточно?
zg писал(а):скобка это команда, а не конструкция
или нада разжевать и проглотить за Вас?

Аватара пользователя
J.Korvin
сержант
Сообщения: 232
Зарегистрирован: 2008-11-22 12:03:41

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение J.Korvin » 2009-03-17 21:44:03

zg писал(а):
J.Korvin писал(а):Спасибо, я и сам про маны знаю я просил указать ошибку а не преподавать мне!!
этого не достаточно?
zg писал(а):скобка это команда, а не конструкция
или нада разжевать и проглотить за Вас?
У меня в мане написано

Код: Выделить всё

    if команда1
    then
        команда2
    fi
Эсли ты с ножом значит ты с мясом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение zg » 2009-03-17 21:50:08

J.Korvin писал(а):У меня в мане написано
zg писал(а):надо уметь читать

Код: Выделить всё

zg# cat 1.sh
#!/bin/sh

if [ "$1" = "some" ]; then
  echo ok
else
  echo fail
fi
zg# ./1.sh asdsd
fail
zg# ./1.sh some
ok
zg#

Аватара пользователя
J.Korvin
сержант
Сообщения: 232
Зарегистрирован: 2008-11-22 12:03:41

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение J.Korvin » 2009-03-17 22:01:38

zg писал(а):
J.Korvin писал(а):У меня в мане написано
zg писал(а):надо уметь читать

Код: Выделить всё

zg# cat 1.sh
#!/bin/sh

if [ "$1" = "some" ]; then
  echo ok
else
  echo fail
fi
zg# ./1.sh asdsd
fail
zg# ./1.sh some
ok
zg#
Спасибо вам ну сравнения и у меня пашет без проблем. А проверить существования нет.
Эсли ты с ножом значит ты с мясом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение zg » 2009-03-17 22:05:16

J.Korvin писал(а):А проверить существования нет.
man [

Аватара пользователя
J.Korvin
сержант
Сообщения: 232
Зарегистрирован: 2008-11-22 12:03:41

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение J.Korvin » 2009-03-17 22:14:45

zg писал(а):
J.Korvin писал(а):А проверить существования нет.
man [
Уже розобрался и что так сложно было сказать что не хватает ""??
Эсли ты с ножом значит ты с мясом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение zg » 2009-03-17 22:25:01

J.Korvin писал(а):и что так сложно было сказать что не хватает ""??
видишь ли, ты тут наворотил и sh и bash, в которых [[ существенно различается, соотвественно и способ использования также различается. В sh [ - это внешняя команда, аргулменты, которой обязательно должны быть заковычены, в bash [[ - это внутряняя конструкция, в которой кавычки необязательны.

Скрипт, который приведён в первом посте нерабочий по определению :pardon: собственно это всё расписано в мане по sh, правда, читать некому :(

Гость
проходил мимо

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение Гость » 2009-03-18 4:19:28

zg писал(а):В sh [ - это внешняя команда, аргулменты, которой обязательно должны быть заковычены,
неа!
  • /bin/[ - это внешняя команда, она *независима* от shell'а. Можно вызывать хоть из tcsh(1), хоть из самописной программы.
  • [ - встроенная комманда, аналогичная test(1). Она есть и в sh(1), и в bash(1).

    Код: Выделить всё

    sh$ type [ [[
    [ is a shell builtin
    [[: not found
    bash$ type [ [[
    [ is a shell builtin
    [[ is a shell keyword
    zsh$ type [ '[['
    [ is a shell builtin
    [[ is a reserved word
    zsh$ where [
    [: shell built-in command
    /bin/[
Напр., в sh(1) есть встроенные expr(1) и printf(1), но во FreeBSD они отключены; в мане нет упоминаний о exp/let, wordexp. Все встроенные команды перечислены в src/bin/sh/builtins.def. Принудительно вызвать внешнюю команду можно с помощью command, а внутреннюю - с помощью builtin.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение zg » 2009-03-18 9:15:29

кусок мана по sh

Код: Выделить всё

[       A built-in equivalent of test(1).
кусок мана по башу

Код: Выделить всё

       [[ expression ]]
              Return  a  status  of  0 or 1 depending on the evaluation of the
              conditional expression expression.  Expressions are composed  of
              the  primaries  described  below  under CONDITIONAL EXPRESSIONS.
              Word splitting and pathname expansion are not performed  on  the
              words  between  the  [[  and  ]]; tilde expansion, parameter and
              variable expansion, arithmetic expansion, command  substitution,
              process  substitution,  and quote removal are performed.  Condi-
              tional operators such as -f must be unquoted to be recognized as
              primaries.
разница есть?

Гость
проходил мимо

Re: Ошибка при выполнении скрипта

Непрочитанное сообщение Гость » 2009-03-18 11:19:26

zg писал(а):кусок мана по башу
в bash'е кроме двойной скобки [[ есть еще и одинарная [. Одинарная там больше для совместимости с sh. Тем не менее мне попадались как-то скрипты для sh, кои *не* работали в bash.