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

sh непонимаю его

Добавлено: 2010-01-02 2:50:46
fox
На прямую sh я избегал и мне хватала других языков но вот тут надо написать на нём скрипт, учебников по нему толковых в гугле нет, чёрт ногу сломит я уже устал, если у кого то есть то поделитесь пожалуйста!
Как в sh спросить существует или нет переменная?
И вот маленький скрипт:

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

#!/bin/sh


prov=''
rez=$1;

if [ $rez != $prov]
then echo "YES";
else echo "NO";
fi
Когда я ввожу вод так:

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

 ./sc.sh
YES
Нормально!
А вод когда вод так:

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

./sc.sh fox
[: !=: argument expected
NO
Вот, что бросается в глаза:

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

[: !=: argument expected
Как это вылечить?
За ранние спасибо, с уважением fox!

Re: sh непонимаю его

Добавлено: 2010-01-02 3:12:21
komander

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

#!/bin/sh


prov=''
rez=$1

if [ "$rez" != "$prov" ];
then echo "YES";
else echo "NO";
fi

Re: sh непонимаю его

Добавлено: 2010-01-02 3:40:19
fox
komander писал(а):

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

#!/bin/sh


prov=''
rez=$1

if [ "$rez" != "$prov" ];
then echo "YES";
else echo "NO";
fi
Спасибо огромное помогло!
А учебника нету у вас случайно?
И как сделать вот так, как в php:

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

isset($a);
У шела что то подобно есть?
Ещё раз огромное спасибо!

Re: sh непонимаю его

Добавлено: 2010-01-02 8:17:38
zg
fox писал(а):А учебника нету у вас случайно?
man sh
fox писал(а):У шела что то подобно есть?
[ -n "${var}"]
man [

Re: sh непонимаю его

Добавлено: 2010-01-02 20:17:15
fox
Man - это круто, но я сума сойду если по нему чему то научюсь, нужен учебник(
Ладно новая не задача:
как сделать, что бы можно было распознавать истину, есть ли в такой переменной такое слово?

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

a=`ps -x|grep script.pl`;

b='script.pl';

так не катит
if[ "$a" = "$b" ]
then echo "YES";
else echo "NO";
fi
Как мне просканировать текст на наличие слова?
Большое спасибо всем тем кто мне помогает!

Re: sh непонимаю его

Добавлено: 2010-01-02 22:53:53
Shuba
fox писал(а):Man - это круто, но я сума сойду если по нему чему то научюсь, нужен учебник(
Ладно новая не задача:
как сделать, что бы можно было распознавать истину, есть ли в такой переменной такое слово?

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

a=`ps -x|grep script.pl`;

b='script.pl';

так не катит
if[ "$a" = "$b" ]
then echo "YES";
else echo "NO";
fi
Как мне просканировать текст на наличие слова?
Большое спасибо всем тем кто мне помогает!
а если так:

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

a=`ps -x|grep script.pl|wc -l`;

if [ "$a" -ne 0 ]
then echo "YES";
else echo "NO";
fi

Re: sh непонимаю его

Добавлено: 2010-01-03 1:03:05
fox
Shuba писал(а):
fox писал(а):Man - это круто, но я сума сойду если по нему чему то научюсь, нужен учебник(
Ладно новая не задача:
как сделать, что бы можно было распознавать истину, есть ли в такой переменной такое слово?

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

a=`ps -x|grep script.pl`;

b='script.pl';

так не катит
if[ "$a" = "$b" ]
then echo "YES";
else echo "NO";
fi
Как мне просканировать текст на наличие слова?
Большое спасибо всем тем кто мне помогает!
а если так:

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

a=`ps -x|grep script.pl|wc -l`;

if [ "$a" -ne 0 ]
then echo "YES";
else echo "NO";
fi
Это то хорошо:

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

ps -x|grep script.pl|wc -l
Только вот брешит часто, когда происходит grep он часто сам себя ещё отлавливает, и по этому счётчик сбивается он тогда может и ноль и один, ответить...
Вот так то..

Re: sh непонимаю его

Добавлено: 2010-01-03 1:10:21
fox
Вопрос вот какой ещё, мне не только надо определить работает этот скрипт или нет, мне ещё и PID выловить надо, как это сделать?
Я пологаю примерно так:

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

1. tmp=`ps -x| grep script.pl`;

2. Сделать цикол, и в виде массивая выложить, если совпадение есть по  имени скрипта, то работает, и тогда pid загнать в переменную!

3. Ну тут понятно kill $pid
Не кто мне не подскажет как это сделать?
Буду очень признателен!

Re: sh непонимаю его

Добавлено: 2010-01-03 7:29:32
zg
fox писал(а):1. tmp=`ps -x| grep script.pl`;

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

%sh -c 'echo $$'
69273
fox писал(а):2. Сделать цикол, и в виде массивая выложить, если совпадение есть по  имени скрипта, то работает, и тогда pid загнать в переменную!
:cz2:
fox писал(а):3. Ну тут понятно kill $pid
??? для чего?

Re: sh непонимаю его

Добавлено: 2010-01-03 14:11:00
fox
zg писал(а):

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

%sh -c 'echo $$'
69273
А как этим пользоваться?
Дико извеняюсь...

Re: sh непонимаю его

Добавлено: 2010-01-03 16:59:38
zg
fox писал(а):А как этим пользоваться?
это PID, который нужно запихнуть в pid-файл и проверять при повторном запуске

Re: sh непонимаю его

Добавлено: 2010-01-03 17:21:05
fox
zg писал(а):
fox писал(а):А как этим пользоваться?
это PID, который нужно запихнуть в pid-файл и проверять при повторном запуске
это я понял, непонятно, как оно работает, куда это в скрипт? Есть рабочий пример?

Re: sh непонимаю его

Добавлено: 2010-01-03 17:50:57
Shuba
fox писал(а): Это то хорошо:

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

ps -x|grep script.pl|wc -l
Только вот брешит часто, когда происходит grep он часто сам себя ещё отлавливает, и по этому счётчик сбивается он тогда может и ноль и один, ответить...
Вот так то..
Усложним:

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

ps -x|grep script.pl|grep -v "grep"|wc -l

Re: sh непонимаю его

Добавлено: 2010-01-03 18:21:08
fox

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

ps -x|grep script.pl|grep -v "grep"|wc -l
Вот это уже дело!
Огромное человеческое спасибо ВАМ!
Только как теперь с pid быть надо как то вырубить теперь раз оно работает?

Re: sh непонимаю его

Добавлено: 2010-01-03 18:38:14
Shuba
fox писал(а):

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

ps -x|grep script.pl|grep -v "grep"|wc -l
Вот это уже дело!
Огромное человеческое спасибо ВАМ!
Только как теперь с pid быть надо как то вырубить теперь раз оно работает?

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

ps -x|grep script.pl|grep -v "grep"|awk '{ print $2 }'

Re: sh непонимаю его

Добавлено: 2010-01-03 18:41:17
Shuba
Ну а если прибить - то так:

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

kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`

Re: sh непонимаю его

Добавлено: 2010-01-03 19:31:40
fox
Огромное спасибо очень помогло!
Знайте все кто помогали мне, вы помогали не просто мне, а всем!
Т.к. я это не только для себя делаю, скоровы увидете, это будет доступно для всех!
Ещё раз огромное спасибо!

Re: sh непонимаю его

Добавлено: 2010-01-03 21:08:53
zg
Shuba писал(а):kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
гм... man pkill не?
fox писал(а):скоровы увидете, это будет доступно для всех!
маны вроде почти по-русски пишут :smile:

Re: sh непонимаю его

Добавлено: 2010-01-04 13:24:42
fox
Ещё раз спасибо, за помощь!

Re: sh непонимаю его

Добавлено: 2010-01-24 10:05:38
Soldier
Привет всем.
пишу мозговыносительнуюзубодробительную штуку.

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

#!/bin/sh
while [ "$1" -ne "stop" ]
do
/bin/echo "stop me" >> /dev/ttyv7
done
Со временем вместо отправки stop me в 7 терминал будет стоять что-нибудь другое.
Проблема вся в том, что сее творение не слушается. оно запускается, шлет писанину в 7 терминал, но не отключается по команде stop.

Подскажите что не так?
Заранее благодарен.

Re: sh непонимаю его

Добавлено: 2010-01-24 10:42:14
Shuba
Soldier писал(а):Привет всем.
пишу мозговыносительнуюзубодробительную штуку.

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

#!/bin/sh
while [ "$1" -ne "stop" ]
do
/bin/echo "stop me" >> /dev/ttyv7
done
Со временем вместо отправки stop me в 7 терминал будет стоять что-нибудь другое.
Проблема вся в том, что сее творение не слушается. оно запускается, шлет писанину в 7 терминал, но не отключается по команде stop.

Подскажите что не так?
Заранее благодарен.
Ну так конечно не остановишь, ты запускаешь данный скрипт и если там нет команды "stop", то вгоняешь его вбесконечный цикл.

Re: sh непонимаю его

Добавлено: 2010-01-24 10:44:21
Soldier
а как это можн сделать не отслеживая пиды и прочее?
просто по команде stop?

Re: sh непонимаю его

Добавлено: 2010-01-24 13:34:40
Shuba
Soldier писал(а):а как это можн сделать не отслеживая пиды и прочее?
просто по команде stop?
Ну так выше были примеры:

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

kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
Соответсвенно:

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

#!/bin/sh
# Убиваем уже запущенный скрипт
kill `ps -x|grep script.sh|grep -v grep|awk '{ print $2 }'`
# Если нет команды stop, то начинаем выводить в консоль
while [ "$1" -ne "stop" ]
 do
  /bin/echo "stop me" >> /dev/ttyv7
 done
Но можно реализовать и так, чтобы при запуске проверяла запущена ли копия, и если запущена и нет команды stop, ничего заканчивать работу без прибития предыдущей копии, а при stop всё заканчивать. Вообщем в нужном направлении я тебя пнул, тренируйся на кошках

Re: sh непонимаю его

Добавлено: 2010-01-24 13:41:50
Soldier
а что за *.pl скрипт? О_о
kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
имя моего скрипта?

Re: sh непонимаю его

Добавлено: 2010-01-24 23:23:28
Shuba
Soldier писал(а):а что за *.pl скрипт? О_о
kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
имя моего скрипта?
Правильно, вместо script.pl вставь нужное имя