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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Терминал. Программирование в Shell  (Прочитано 5122 раз)

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

Оффлайн ardor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
shell
linux ubuntu 10.10
у меня почемуто некорректо работает команда expr
echo `expr 2+2` - должно вывести 4
а выводит 2+2

когда пишу help expr - пишет ненайдено))

Оффлайн skylex1993

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #1 : 15 Марта 2011, 20:33:48 »
пробелы между 2+2

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Терминал. Программирование в Shell
« Ответ #2 : 15 Марта 2011, 20:36:42 »
echo $((2+2))
PS: при чем тут Shell?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн ardor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #3 : 15 Марта 2011, 21:43:11 »
Спасибо, работает) Я просто линукс недавно поставил. В универе лабы. И если по теории делать примеры - то почти все неработают. Кстати `expr 2+2` - это из теории))

Следующий вопрос:
while test $vibor!=5
do
"куча кода"
read vibor
done

вот так получился цикл, но он не проверяет условие "повторять пока не 5". если пишу while test $vibor -ne 5   - пишет -ne - unexpected operator

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Терминал. Программирование в Shell
« Ответ #4 : 15 Марта 2011, 21:47:02 »
while [ "$again" = "yes" ] #Будем выполнять цикл, пока $again будет равно "yes"
do
echo "Please enter a name:"
read name
echo "The name you entered is $name"
done

http://habrahabr.ru/blogs/linux/52871/
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн ardor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #5 : 15 Марта 2011, 23:01:45 »
))) спс.
« Последнее редактирование: 15 Марта 2011, 23:16:38 от ardor »

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #6 : 16 Марта 2011, 07:35:35 »
expr 2 + 2
делает то что надо. echo не нужно, нужны пробелы между аргументами. Но пользоваться этой командой не надо, конструкция для арифметических целых выражений $(()) из posix-стандарта.

===
while test "$vibor" != 5; do
    read vibor
done

отлично работает, если нажать 5 и Enter. -ne для сравнения чисел. Для работы переменная vibor должна быть инициализирована в целое число:

vibor=0
while test "$vibor" -ne 5 ; do
...

Помни, что если экспериментируешь в терминале, то значение vibor сохраняется. Один раз ему присвоилось значение 5 и следующий цикл будет выходить сразу же.
« Последнее редактирование: 16 Марта 2011, 07:46:05 от Мангуст »

Оффлайн Gambit_88

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #7 : 25 Марта 2011, 14:46:31 »
Народ, подскажите с чего начать изучение шелла под убунтой? Можете дать ссылку на учебник какой? Чтобы прям самые азы практики были расписаны: что в ОС запускать, как начинать написание программы и т.п.
Сам пока ничего подходящего не нашел, в основном разбираются отдельные команды, а не создание цельной программы.. да и в командах этих используются операции, о которых даже и речи нет - для чего их тут применили не понять.

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #8 : 25 Марта 2011, 17:34:21 »
Народ, подскажите с чего начать изучение шелла под убунтой? Можете дать ссылку на учебник какой? Чтобы прям самые азы практики были расписаны: что в ОС запускать, как начинать написание программы и т.п.
Сам пока ничего подходящего не нашел, в основном разбираются отдельные команды, а не создание цельной программы.. да и в командах этих используются операции, о которых даже и речи нет - для чего их тут применили не понять.

Если есть здоровое умение фильтровать ненужную информацию (и интерес к истории UNIX), то лучше "Программного окружения UNIX" не найдешь. Можно поискать в Инете, можно купить. НО!!! Книге 27 лет исполнилось. И хотя она как раз доходчиво и понятно излагает те самые азы (которые очень мало изменились), возраст дает о себе знать. Вот бы переделать ее малехо (или не малехо, но сохранить стиль авторов), было бы очень здорово.

А на английском - огромное количество и легального и нелегального материала. Мне понравилось Ubuntu Linux Toolbox: 1000+ Commands for Ubuntu and Debian Power Users и Classic Shell Scripting. На русском что-то попадалось, но не понравилось.

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #9 : 25 Марта 2011, 18:13:05 »
http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Где-то качал html-версию и изучал bash  по ней.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн Gambit_88

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #10 : 28 Марта 2011, 22:41:07 »
Благодарю за ответы.

Следующий вопрос таков:
Проблема с использованием утилиты netcat.
Пытаюсь выполнить команду
netcat -l -p 1111Но в ответ получаю только краткую справку по использованию утилиты
Цитировать
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port]
Как мне открыть порт?

Оффлайн Torna

  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #11 : 29 Марта 2011, 03:10:23 »
iptables -A INPUT -p tcp -i eth0 --dport 1111 -j ACCEPT
iptables -A OUTPUT -p tcp -i eth0 --sport 1111 -j ACCEPT

http://linux.die.net/man/1/nc
Цитировать
-p source_port
Specifies the source port nc should use, subject to privilege restrictions and availability. It is an error to use this option in conjunction with the -l option.
« Последнее редактирование: 29 Марта 2011, 03:13:43 от Torna »

Оффлайн Gambit_88

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #12 : 29 Марта 2011, 14:41:01 »
В 1-м терминале открываю порт
netcat -l 1111Во втором пишу
netcat -l 1112 > out
echo `cd temp; ls | netcat 127.0.0.1 1112` | netcat 127.0.0.1 1111
То есть задумка в том, что 1-й терминал через nc получает содержимое папки temp и отправляет его второму терминалу, который выводит его в файл out.

Вопрос в том, как открыть порт 1112 второго терминала так, чтобы следующий за открытием код продолжил выполняться (у меня стопориться после открытия, переходя в режим набора символов)? Может с какими-то параметрами nc пускать? Или же написанная структура команды в любом случае не даст нужного результата? :D

Оффлайн Gluck_sistemi

  • Участник
  • *
  • Сообщений: 134
  • Или я не прав? Поправьте меня! ©
    • Просмотр профиля
Re: Терминал. Программирование в Shell
« Ответ #13 : 29 Марта 2011, 15:03:20 »
http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Где-то качал html-версию и изучал bash  по ней.

заманчиво смотрится, скачал, давно хотел вплотную этим вопросом заняться)
спасибо)
We can't undo what we have done
So show us now what we've become
Confront us with our viciousness And our weakness


 

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