Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-02 2:50:46
На прямую sh я избегал и мне хватала других языков но вот тут надо написать на нём скрипт, учебников по нему толковых в гугле нет, чёрт ногу сломит я уже устал, если у кого то есть то поделитесь пожалуйста!
Как в sh спросить существует или нет переменная?
И вот маленький скрипт:
Код: Выделить всё
#!/bin/sh
prov=''
rez=$1;
if [ $rez != $prov]
then echo "YES";
else echo "NO";
fi
Когда я ввожу вод так:
Нормально!
А вод когда вод так:
Вот, что бросается в глаза:
Как это вылечить?
За ранние спасибо, с уважением fox!
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
Хостинг HostFood.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/
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-02 3:40:19
komander писал(а):Код: Выделить всё
#!/bin/sh
prov=''
rez=$1
if [ "$rez" != "$prov" ];
then echo "YES";
else echo "NO";
fi
Спасибо огромное помогло!
А учебника нету у вас случайно?
И как сделать вот так, как в php:
У шела что то подобно есть?
Ещё раз огромное спасибо!
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2010-01-02 8:17:38
fox писал(а):А учебника нету у вас случайно?
man sh
fox писал(а):У шела что то подобно есть?
[ -n "${var}"]
man [
zg
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-02 20:17:15
Man - это круто, но я сума сойду если по нему чему то научюсь, нужен учебник(
Ладно новая не задача:
как сделать, что бы можно было распознавать истину, есть ли в такой переменной такое слово?
Код: Выделить всё
a=`ps -x|grep script.pl`;
b='script.pl';
так не катит
if[ "$a" = "$b" ]
then echo "YES";
else echo "NO";
fi
Как мне просканировать текст на наличие слова?
Большое спасибо всем тем кто мне помогает!
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
Shuba
- ст. сержант
- Сообщения: 365
- Зарегистрирован: 2008-03-25 10:58:21
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Shuba » 2010-01-02 22:53:53
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
Сила ночи, сила дня - одинакова фигня!
Shuba
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-03 1:03:05
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
Это то хорошо:
Только вот брешит часто, когда происходит grep он часто сам себя ещё отлавливает, и по этому счётчик сбивается он тогда может и ноль и один, ответить...
Вот так то..
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-03 1:10:21
Вопрос вот какой ещё, мне не только надо определить работает этот скрипт или нет, мне ещё и PID выловить надо, как это сделать?
Я пологаю примерно так:
Код: Выделить всё
1. tmp=`ps -x| grep script.pl`;
2. Сделать цикол, и в виде массивая выложить, если совпадение есть по имени скрипта, то работает, и тогда pid загнать в переменную!
3. Ну тут понятно kill $pid
Не кто мне не подскажет как это сделать?
Буду очень признателен!
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2010-01-03 7:29:32
fox писал(а):1. tmp=`ps -x| grep script.pl`;
fox писал(а):2. Сделать цикол, и в виде массивая выложить, если совпадение есть по имени скрипта, то работает, и тогда pid загнать в переменную!
fox писал(а):3. Ну тут понятно kill $pid
??? для чего?
zg
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-03 14:11:00
А как этим пользоваться?
Дико извеняюсь...
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2010-01-03 16:59:38
fox писал(а):А как этим пользоваться?
это PID, который нужно запихнуть в pid-файл и проверять при повторном запуске
zg
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-03 17:21:05
zg писал(а):fox писал(а):А как этим пользоваться?
это PID, который нужно запихнуть в pid-файл и проверять при повторном запуске
это я понял, непонятно, как оно работает, куда это в скрипт? Есть рабочий пример?
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
Shuba
- ст. сержант
- Сообщения: 365
- Зарегистрирован: 2008-03-25 10:58:21
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Shuba » 2010-01-03 17:50:57
fox писал(а):
Это то хорошо:
Только вот брешит часто, когда происходит grep он часто сам себя ещё отлавливает, и по этому счётчик сбивается он тогда может и ноль и один, ответить...
Вот так то..
Усложним:
Сила ночи, сила дня - одинакова фигня!
Shuba
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-03 18:21:08
Вот это уже дело!
Огромное человеческое спасибо ВАМ!
Только как теперь с pid быть надо как то вырубить теперь раз оно работает?
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
Shuba
- ст. сержант
- Сообщения: 365
- Зарегистрирован: 2008-03-25 10:58:21
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Shuba » 2010-01-03 18:38:14
fox писал(а):
Вот это уже дело!
Огромное человеческое спасибо ВАМ!
Только как теперь с pid быть надо как то вырубить теперь раз оно работает?
Код: Выделить всё
ps -x|grep script.pl|grep -v "grep"|awk '{ print $2 }'
Сила ночи, сила дня - одинакова фигня!
Shuba
-
Shuba
- ст. сержант
- Сообщения: 365
- Зарегистрирован: 2008-03-25 10:58:21
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Shuba » 2010-01-03 18:41:17
Ну а если прибить - то так:
Код: Выделить всё
kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
Сила ночи, сила дня - одинакова фигня!
Shuba
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-03 19:31:40
Огромное спасибо очень помогло!
Знайте все кто помогали мне, вы помогали не просто мне, а всем!
Т.к. я это не только для себя делаю, скоровы увидете, это будет доступно для всех!
Ещё раз огромное спасибо!
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2010-01-03 21:08:53
Shuba писал(а):kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
гм...
man pkill не?
fox писал(а):скоровы увидете, это будет доступно для всех!
маны вроде почти по-русски пишут

zg
-
fox
- ст. лейтенант
- Сообщения: 1154
- Зарегистрирован: 2008-07-24 0:25:31
- Откуда: Ukraine, Donetsk
Непрочитанное сообщение
fox » 2010-01-04 13:24:42
Ещё раз спасибо, за помощь!
Да пребудет с нами сила!!!
Всех убью, один останусь!
fox
-
Soldier
- ст. сержант
- Сообщения: 364
- Зарегистрирован: 2008-10-02 9:28:30
Непрочитанное сообщение
Soldier » 2010-01-24 10:05:38
Привет всем.
пишу мозговыносительнуюзубодробительную штуку.
Код: Выделить всё
#!/bin/sh
while [ "$1" -ne "stop" ]
do
/bin/echo "stop me" >> /dev/ttyv7
done
Со временем вместо отправки stop me в 7 терминал будет стоять что-нибудь другое.
Проблема вся в том, что сее творение не слушается. оно запускается, шлет писанину в 7 терминал, но не отключается по команде stop.
Подскажите что не так?
Заранее благодарен.
Tux: "Kill Bill !!!"
Soldier
-
Shuba
- ст. сержант
- Сообщения: 365
- Зарегистрирован: 2008-03-25 10:58:21
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Shuba » 2010-01-24 10:42:14
Soldier писал(а):Привет всем.
пишу мозговыносительнуюзубодробительную штуку.
Код: Выделить всё
#!/bin/sh
while [ "$1" -ne "stop" ]
do
/bin/echo "stop me" >> /dev/ttyv7
done
Со временем вместо отправки stop me в 7 терминал будет стоять что-нибудь другое.
Проблема вся в том, что сее творение не слушается. оно запускается, шлет писанину в 7 терминал, но не отключается по команде stop.
Подскажите что не так?
Заранее благодарен.
Ну так конечно не остановишь, ты запускаешь данный скрипт и если там нет команды "stop", то вгоняешь его вбесконечный цикл.
Сила ночи, сила дня - одинакова фигня!
Shuba
-
Soldier
- ст. сержант
- Сообщения: 364
- Зарегистрирован: 2008-10-02 9:28:30
Непрочитанное сообщение
Soldier » 2010-01-24 10:44:21
а как это можн сделать не отслеживая пиды и прочее?
просто по команде stop?
Tux: "Kill Bill !!!"
Soldier
-
Shuba
- ст. сержант
- Сообщения: 365
- Зарегистрирован: 2008-03-25 10:58:21
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Shuba » 2010-01-24 13:34:40
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 всё заканчивать. Вообщем в нужном направлении я тебя пнул, тренируйся на кошках
Сила ночи, сила дня - одинакова фигня!
Shuba
-
Soldier
- ст. сержант
- Сообщения: 364
- Зарегистрирован: 2008-10-02 9:28:30
Непрочитанное сообщение
Soldier » 2010-01-24 13:41:50
а что за *.pl скрипт? О_о
kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
имя моего скрипта?
Tux: "Kill Bill !!!"
Soldier
-
Shuba
- ст. сержант
- Сообщения: 365
- Зарегистрирован: 2008-03-25 10:58:21
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Shuba » 2010-01-24 23:23:28
Soldier писал(а):а что за *.pl скрипт? О_о
kill `ps -x|grep script.pl|grep -v grep|awk '{ print $2 }'`
имя моего скрипта?
Правильно, вместо script.pl вставь нужное имя
Сила ночи, сила дня - одинакова фигня!
Shuba