Страница 1 из 1

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

Добавлено: 2009-03-17 20:54:03
J.Korvin
Вот хочу чтобы проверяло существут процес или нет?
А врезультате выполнения ошибка хотя процес существует.
Когда /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

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

Добавлено: 2009-03-17 21:18:12
zg
скобка это команда, а не конструкция

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

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

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

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

zg# pgrep init
1
zg# pgrep inet
zg#

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

Добавлено: 2009-03-17 21:20:47
J.Korvin
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

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

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

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

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

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

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

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

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

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

    if команда1
    then
        команда2
    fi

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

Добавлено: 2009-03-17 21:50:08
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#

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

Добавлено: 2009-03-17 22:01:38
J.Korvin
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#
Спасибо вам ну сравнения и у меня пашет без проблем. А проверить существования нет.

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

Добавлено: 2009-03-17 22:05:16
zg
J.Korvin писал(а):А проверить существования нет.
man [

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

Добавлено: 2009-03-17 22:14:45
J.Korvin
zg писал(а):
J.Korvin писал(а):А проверить существования нет.
man [
Уже розобрался и что так сложно было сказать что не хватает ""??

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

Добавлено: 2009-03-17 22:25:01
zg
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.

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

Добавлено: 2009-03-18 9:15:29
zg
кусок мана по 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.