Разработка консольных приложений и автоматизация задач на PHP старый добрый язык как знакомая


Оглавление (нажмите, чтобы открыть):

Удобная среда для разработки консольных приложений на языке Pascal

Посоветуйте, пожалуйста, удобную среду для разработки консольных приложений на языке Pascal. Под удобной, я подразумеваю следующее:

  • Наличие раскраски типов данных, операторов и т.п.
  • Наличие проверки синтаксиса сразу же при написании кода, в случае если есть ошибки, подчеркивает эти места.
  • Наличие функции дописывания названий переменных, функций, структур, классов и т.п. при вводе начальных букв.
  • Наличие хорошего поиска и замены. Например, становимся курсором на название переменной, выбираем «Переименовать», далее вписываем новое название, после чего переменная переименовывается только в тех местах, где она была видимая (а не тупо замена одного слова на другое). То же самое относиться и к функциям, классам и т.п.
  • Возможность перехода к месту объявления переменной, функции и т.п.
  • Наличие функции автоматического форматирования кода
  • Возможность сворачивать функции, после сворачивания отображает только название функции.
  • Встроенная документация, например, становимся курсором на нужную нам функцию и нажимаем «F1», открывает документация про эту функцию.

Может что-то забыл сюда написать, но думаю и так понятно, что я ожидаю от IDE.

Как сделать автоматический ответ Y / N в Bash сценарии?

Есть баш скрипт script.sh
В ходе его исполнения появляется запрос, на который нужно ответить y/n:
Например:
default: Are you sure you want to destroy the ‘default’ VM? [y/N]

Подскажите, как указать скрипту автоматически отвечать «y» ?

  • Вопрос задан более двух лет назад
  • 801 просмотр

1. Если скрипт свой, можно его подредактировать найти где спрашивает и убрать лишний вопрос.

Linux. Задачи на bash.

Попались мне как то на глаза задачки для собеседования на Linux админа, показались мне интересными и я предлагаю их решение скриптами на bash c использованием coreutils, если у кого то есть более изящные решения, то отпишите в комментариях.

Так же в продолжении темы предлагаю другие статьи по данной рубрике «Задачи на bash»

Вопрос 1
Написать простейший скрипт на Bash, который должен принимать в качестве аргумента любую строку и удалять из /home/ файл с именем, соответствующим переданной строке без необходимости отвечать утвердительно на вопросы системы. Так же должны быть выполнены условия, при которых скрипт не удалит все файлы при передаче в качестве параметра «*» и удалит файлы, имена которых начинаются с «-«.

Пример запуска скрипта:

$ deleter.sh -s # должен удалить файл /home/-s $ deleter.sh * # должен ничего не делать

#!/bin/bash rmfile=$1 dirrm=/root/t scr=`echo $0 ` if [ $ = «deleter.sh» ] then echo «ничего удалять не будем» else case $rmfile in «-«) rm -f $/* ;; *) rm -f $/$ esac fi

Вопрос 2
Написать скрипт, который из /etc/passwd выведет домашнюю директорию для пользователя www-data, пример файла /etc/passwd:

sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:103::/home/syslog:/bin/false messagebus:x:102:105::/var/run/dbus:/bin/false

#!/bin/bash user=www-data homedir=`grep $user «/etc/passwd» | cut -d: -f6` echo $homedir

#!/bin/bash user=www-data awk -F: ‘‘ user=$user /etc/passwd

Вопрос 3
Написать скрипт, который выведет top 5 процессов, которые потребляют больше всего памяти и процессора в системе.

#!/bin/bash ps -aeo pid,size | sort -rhk 2 | head -n 5

Вопрос 4
Написать скрипт, который выведет всех потомков процесса по его PID.

Вопрос 5
Написать скрипт, который для всех файлов во временной директории, которые были созданы за текущий месяц, и не изменялись в течение недели при нахождении в них строки test поменяет ее на tset.

#!/bin/bash day=-`date +%d` find /tmp/ -type f -mtime $day -atime +7 | xargs sed -i -e «s/test/tset/»

Вопрос 6
Написать скрипт, которые выведет на экран все файлы, размер которых больше 50 Мб в директории /var/log

#!/bin/bash find /var/log -type f -size +50M

Вопрос 7
Написать скрипт, который в качестве первого параметра принимает команду, которую нужно выполнить, а в качестве остальных параметров адреса серверов, на которых эта команда должна выполниться.

#!/bin/bash user=root server=$* nserver=$# server=(`echo $server`) while [ «$nserver» -gt 1 ] ; do ((nserver—)) echo $ ssh $@$ $1 done

Вопрос 8
Написать скрипт, который в качестве параметров принимает адреса серверов и выдает адрес сервера, на котором свободной памяти осталось менее 100 Мб в формате server name|free memory

#!/bin/bash user=root servers=$* for server in `echo $servers` do a=(`ssh $@$ free | grep Mem`) #a=(`free | grep Mem | cut -f 4-6`) freemem=$ if [ $ -lt 1024000 ] then echo $server «|» $freemem fi done

Вопрос 9
Написать скрипт, которые для указанного доменного имени, получит все А записи и выведет на экран те сервера, которые недоступны.

#!/bin/bash ip=(`nslookup $1 | grep Address: | egrep -o «[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]» | xargs echo` ) for i in `echo $` do ping -c1 $i > /dev/null || echo $i’ bad server!’ done

#!/bin/bash dnsa=$(host -t A $1 | awk ‘‘ | tr «\n» » «) for ip in $ do ping -c2 $ip > /dev/null || echo $ip is not available done

Чем так хорош язык веб-разработки PHP

Дата публикации: 2020-10-26

От автора: пришла пора рассказать о языке, который формирует большинство современных веб-страниц. Кто-то отзывается о нем хорошо, кто-то плохо, но не существует разработчиков, которые бы игнорировали его существование. Сегодня разберем все основные моменты, которые таит в себе язык веб-разработки PHP. Заодно выясним, как использовать его с максимальной эффективностью.

Все преимущества

На «препроцессор» ругаются даже те, кто ничего о нем не знает. Новичку достаточно услышать от опытного программиста нелестную критику, и он, уже подражая корифею, отзывается негативно. Вы тоже не раз слышали подобное: низкая типизация данных, ошибки в коде и много всего другого. Но об этом позже: сначала о хорошем.

Предназначение: для чего создан язык

Днем рождения принято считать 8 июня 1995 года, когда Расмус Лердорф выпустил первую версию Personal Home Page Tools (PHP Tools). За основу он взял Perl и создал интерпретатор шаблонов, который должен был ускорить веб-разработку. Через два года он выпустил вторую версию шаблонизатора, разработка которого велась с помощью С.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Но настоящее рождение «препроцессора», как языка, который известен сегодня, произошло в 1998 году, когда был полностью переписан код. Увидев перспективную разработку, программисты со всего мира принялись совершенствовать ее. Именно благодаря общему труду, сегодня язык поддерживает создание wеб-приложений на основе различных серверов и баз данных. Ну, а тот «препроцессор», который вдохновил Цукерберга на создание Facebook, появился в 2004.

С момента выпуска пятой версии он начал наращивать свою популярность. Новизна и простота работы сделали первым номером в плане разработки бэк-энда для web-приложений. С его помощью разрабатывают настолько часто, что он стал постоянной составляющей в AMP-комплексах серверного программного обеспечения.

Так много на PHP

Хотя и программисты любят наговорить плохого о «препроцессоре», они знают, как много удачных проектов взяли его за основу. Самыми популярными из них являются Facebook и WordPress. C первым вы знакомы давно: это самая большая социальная сеть в мире. Они даже выпустили собственный транслятор для языка, который называется HipHop. Для Цукерберга, скорее всего, выбор был обусловлен простотой языка. Изначально, FB не планировался настолько масштабным, потому разработка с помощью «гипертекстового препроцессора» казалась хорошей идеей.

Все страницы и веб-приложения работали на языке долгие годы, пока команда не решила отказаться от этого. Они создали новый, чтобы с его помощью продолжить поддержку сайта. Но правда в том, что даже новый язык — это тот же «препроцессор», только с некоторыми дополнениями. В основе языка Hack лежит PHP, но разработанный для нужд Facebook. Скорее всего, разработка с помощью уникального языка была скорее коммерческим ходом, чем необходимостью.

О том, что в основе WordPress лежит PHP, не знает разве что ленивый. При этом сама платформа работает отлично, особенно в новых версиях. Самые любопытные даже знают о том, что в свое время проблемы с сериализацией создавали опасность для сайтов, сделанных в WP. Некоторые даже пророчили крах CMS, но 12 июля 2020 года компания выпустила версии, где все проблемы были устранены. Кстати, при помощи того же «препроцессорa».

Мастер Йода рекомендует:  Облачное хранилище белогривые лошадки или черт в табакерке

Но социальная сеть и система управления могут показаться не самыми весомыми доказательствами эффективности PHP. Нужно привести web-приложение, которое полностью работает на этом языке, решает глобальные проблемы и имеет коммерческий успех. Что ж, платформа электронной коммерции WooCommerce тоже полностью разработана с помощью «препроцессорa». Через нее проходит почти половина всех интернет-покупок в мире. Кстати, в основе их ближайшего конкурента — Magento — тоже лежит PHP.

Почему же все эти проекты и web-приложения взяли такой критикуемый шаблонизатор за основу? Об этом далее!

О достоинствах

Надо сказать, что большинство позитивных сторон PHP и так известны программистам. Вот перечень преимуществ, которые делают широко применимым его в веб-разработке:

разработка с помощью PHP дает много возможностей. При должном уровне владения, с помощью шаблонизатора можно создавать не только сценарии для веб-приложений, но и полноценные программы. Существуют решения, позволяющие создавать мобильные приложения на PHP;

изучение PHP не требует много времени. Это одновременно и плюс, и минус. Ведь основательное знание требует практики, но об этом позже;

кроссплатформенность. PHP может быть запущен в любой операционной системе, включая юниксоиды;

поддержка веб-серверов. Сложно найти тот, который бы не работал с PHP;

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

бесплатное распространение. Возможно, PHP не был так популярен для создания web-приложений, если бы не был бесплатным, как и большинство инструментов для работы с ним. Аналоги, которые, в основном, могут выполнить ту же работу, обычно стоят дороже;

имеет достаточную произвольность для web-разработки. Конечно, такие базовые языки, как C-семейство, работают быстрее, но для веба это не критично;

наличие учебных материалов. Все знают о «косяках» PHP лишь потому, что разработку, в основном, ведут с его помощью. Попробуйте найти в Google недостатки «Virtual Reality Modeling Language». Будет сложно, ведь его мало кто знает. Зато основу недостатков «препроцессорa» уже все выучили наизусть из-за широкой используемости языка. Именно потому, если у вас что-то не получается, всегда можно заглянуть в поисковик: с вашей проблемой, вероятнее всего, кто-то уже сталкивался;

непрерывное развитие. То, что сегодня о шаблонизаторе знают так много, означает лишь одно: с недостатками, рано или поздно, справятся.

Около 80% всех существующих web-приложений было создано на шаблонизаторе, и естественно, что в них были найдены ошибки. К тому же, низкий порог входа позволяет новичкам создавать масштабные продукты. Их «поделки» редко отличаются качеством, но все-же работают.

Проблемы, требующие решения

Несмотря на широкую используемость в сфере создания сайтов и web-приложений, у «препроцессорa» действительно есть недостатки. Но если одни видят в них причины не изучать язык, то другие видят предупреждение, которое нужно воспринимать как путеводитель. Среди проблем:

узкопрофильность. Если вы выучили разработку с помощью PHP, то у вас одна дорога — в веб. И хотя возможности расширены различными реализациями, все же он «заточен» под программирование для Интернета;

безопасность. У PHP есть средства безопасности уровня системы и уровня web-приложения. Но, опять же, широкая используемость сыграла злую шутку: дыры в PHP находят быстрее, чем разработчики успевают их закрывать. В PHP 7 множество проблем решено, но злоумышленник всегда впереди. В силу того, что массы знают «препроцессор», трудно предугадать всё;

противоречия в коде. Когда шаблонизатор был только создан, все программное обеспечение разрабатывались с помощью С. Потому в языке было применено множество синтаксиса из него. В то же время, современная аудитория больше сконцентрирована на Java. В итоге, код переполнен различными остатками из разных языков. И все они могут даже быть сконцентрированы в одном выражении кода.

Но основы всех проблем, с которыми связывают PHP, спровоцированы не самим шаблонизатором, а скорее, с окружающими обстоятельствами. Сам по себе язык отлично интегрировался в разработку современных веб-приложений. И такая ситуация сохраняется уже много лет. Начиная с 1998 года веб-разработка с помощью PHP проводится в 8 случаях из 10. Таких долгожителей в программировании не так уж много: тренды меняются очень быстро.

Не стоит и забывать, что «препроцессор» создан для конкретной цели: веб-разработка. И если молодой разработчик в нем делает ошибки, это не так уж важно. Тем более, что люди, получившие основу при изучении PHP, гораздо охотнее развиваются далее, чем те, кто обломил энтузиазм о сложность таких языков, как Java.

Впереди развитие

Не был бы «препроцессор» так популярен для создания веб-приложений, если бы так стремительно не развивался. Особенно порадовала разработчиков седьмая версия, которая имеет ряд позитивных отличий. Среди них, например, внедрение оператора объединения с null, объявления скалярных типов и много другого. Как и планировалось в шестой, седьмая версия полностью принимает шестнадцатеричный Unicode.

Примечательно, что уже идет разработка версии 7.2, которая готовит еще больше новостей, чем предшественник. Множество функций в шаблонизаторе, с помощью которого будет идти веб-разработка в будущем, теперь признаны устаревшими.

Но в отличие от растущего конкурента Go — малоиспользуемого, но эффективного Ruby — новому PHP уже есть, у кого поучиться. Он используется настолько широко, что материалы для освоения выходят почти синхронно с самими версиями. Каждый год ему пророчат полную замену аналогами по разным причинам: считается, что серверная сторона на языке не будет нужна, а ее полностью заменит клиентский JavaScript. Но несмотря на предсказания, новые фреймворки выходят, а самих сайтов на шаблонизаторе меньше не становится.

«Препроцессор», как язык web-приложений, однозначно нужно учить. Человеку, который уже знает С или подобные, он «зайдет» на ура. А тому, кто только пришел в разработку, он не доставит много хлопот. Это настоящий подарок: интересное начинается с самого начала. Так что:

Выполнение задачи в фоне (php)

Стоит такая задача:

Вот пример скрипта консольного (файл test.php):

Когда клиент посылает запрос, мы его обрабатываем:

Здесь мы просто выполняем наш тестовый скрипт и все.

Запрос приходит аяксом. Скрипт запускается, все хорошо, отрабатывает. Кнопка снова активируется.

Проблема:

Как это можно исправить?

4 ответа 4

Думаю, с таким подходом — никак. Потому что этот скрипт занимает весь Thread.

Есть вариант запускать exec(«/path/to/file/test.php &»); но не так, а так: exec(«/usr/bin/php /var/www/path/to/file/test.php &»); и не спать, а переложить выполнение на этот второй процесс. А если нужны данные ответа твоего «/path/to/file/test.php», то брать их из sdtout или в самом скрипте «test.php» записать вывод в файл — его наличие как-раз оповестит о том, что скрипт выполнился.

Нужно сделать так:

Они и должны выполняться из консоли, а вот как их запускать в отдельном процессе в помощь недавний вопрос там про очередь выполнения все написано.

А то что написано у тебя, работать по твоей логике не будет.

//UPD комменты жгут как обычно. Их нехватает.

Я на самом деле даже дальше и думать не хочу, я предложил хороший вариант решения задачи, он адекватный и по затратам памяти хороший, т.к. скрипты выполняются из консоли, что требует меньше памяти, чем выполнение их через браузер.

Очередь нужна. Попробуй 100 раз запустить свой скрипт, твой сервер ругнется и выполнять ничего не будет. если на выполнение ему нужно 10-15 минут — тут оптимизацией заняться нужно т.к. ответ на вопрос уже есть, а додумывать что-то из ряда вон выходящее без причин безумно глупо.

Пойми, сделав очередь — ты никого не обидешь этим. В фейсбуке многие вещи не обновляются сразу, там бывает проходит от 5 до 15 минут, пока новость/картинка/статья добавится в общую ленту.

Из того что ты написал непонятно из-за чего так долго все выполняется. Значит дело в коде. Если на каждого юзера уходит 10 минут процессорного времени — это жуть! А будет из 100К, этож сколько денег нужно на сервера и память чтобы обрабатывать чстолько непонятно чего.

А так, нажал юзер на кнопку и забыл про её существование, когда дело дойдет до него он получит свой ответ и его данные будут обработаны.

Если ты не можешь выбрать из предложенных вариантов ни одного, тогда тут мало кто тебе чем поможет, можешь пойти изобрести велосипед :). Я дальше, честно не знаю чем тебе помочь. Ты настаиваешь на каком-то своем решении вопроса, не вчитываясь в ответы других.

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

Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Мастер Йода рекомендует:  Форма обратной связи wordpress – отличный способ коммуникации с посетителями сайта

Автор Тема: Разработка консольного приложения. (Прочитано 10589 раз)

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

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

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Написание скриптов на Bash

Каким бы простым ни был графический интерфейс в Linux и сколько бы там ни было функций, все равно есть задачи, которые удобнее решать через терминал. Во-первых, потому что это быстрее, во-вторых — не на всех машинах есть графический интерфейс, например, на серверах все действия выполняются через терминал, в целях экономии вычислительных ресурсов.

Если вы уже более опытный пользователь, то, наверное, часто выполняете различные задачи через терминал. Часто встречаются задачи, для которых нужно выполнять несколько команд по очереди, например, для обновления системы необходимо сначала выполнить обновление репозиториев, а уже затем скачать новые версии пакетов. Это только пример и таких действий очень много, даже взять резервное копирование и загрузку скопированных файлов на удаленный сервер. Поэтому, чтобы не набирать одни и те же команды несколько раз можно использовать скрипты. В этой статье мы рассмотрим написание скриптов на Bash, рассмотрим основные операторы, а также то как они работают, так сказать, bash скрипты с нуля.

Основы скриптов

Скрипт или как его еще называют — сценарий, это последовательность команд, которые по очереди считывает и выполняет программа-интерпретатор, в нашем случае это программа командной строки — bash.

Скрипт — это обычный текстовый файл, в котором перечислены обычные команды, которые мы привыкли вводить вручную, а также указанна программа, которая будет их выполнять. Загрузчик, который будет выполнять скрипт не умеет работать с переменными окружения, поэтому ему нужно передать точный путь к программе, которую нужно запустить. А дальше он уже передаст ваш скрипт этой программе и начнется выполнение.

Простейший пример скрипта для командной оболочки Bash:

!/bin/bash
echo «Hello world»

Утилита echo выводит строку, переданную ей в параметре на экран. Первая строка особая, она задает программу, которая будет выполнять команды. Вообще говоря, мы можем создать скрипт на любом другом языке программирования и указать нужный интерпретатор, например, на python:

!/usr/bin/env python
print(«Hello world»)

!/usr/bin/env php
echo «Hello world»;

В первом случае мы прямо указали на программу, которая будет выполнять команды, в двух следующих мы не знаем точный адрес программы, поэтому просим утилиту env найти ее по имени и запустить. Такой подход используется во многих скриптах. Но это еще не все. В системе Linux, чтобы система могла выполнить скрипт, нужно установить на файл с ним флаг исполняемый.


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

chmod ugo+x файл_скрипта

Теперь выполняем нашу небольшую первую программу:

Все работает. Вы уже знаете как написать маленький скрипт, скажем для обновления. Как видите, скрипты содержат те же команды, что и выполняются в терминале, их писать очень просто. Но теперь мы немного усложним задачу. Поскольку скрипт, это программа, ему нужно самому принимать некоторые решения, хранить результаты выполнения команд и выполнять циклы. Все это позволяет делать оболочка Bash. Правда, тут все намного сложнее. Начнем с простого.

Переменные в скриптах

Написание скриптов на Bash редко обходится без сохранения временных данных, а значит создания переменных. Без переменных не обходится ни один язык программирования и наш примитивный язык командной оболочки тоже.

Возможно, вы уже раньше встречались с переменными окружения. Так вот, это те же самые переменные и работают они аналогично.

Например, объявим переменную string:

Значение нашей строки в кавычках. Но на самом деле кавычки не всегда нужны. Здесь сохраняется главный принцип bash — пробел — это специальный символ, разделитель, поэтому если не использовать кавычки world уже будет считаться отдельной командой, по той же причине мы не ставим пробелов перед и после знака равно.

Чтобы вывести значение переменной используется символ $. Например:

Модифицируем наш скрипт:

!/bin/bash
string1=»hello »
string2=world
string=$string1$string2
echo $string

Bash не различает типов переменных так, как языки высокого уровня, например, С++, вы можете присвоить переменной как число, так и строку. Одинаково все это будет считаться строкой. Оболочка поддерживает только слияние строк, для этого просто запишите имена переменных подряд:

!/bin/bash
string1=»hello »
string2=world
string=$string1$string2\ and\ me
string3=$string1$string2″ and me»
echo $string3

Обратите внимание, что как я и говорил, кавычки необязательны если в строке нет спецсимволов. Присмотритесь к обоим способам слияния строк, здесь тоже демонстрируется роль кавычек. Если же вам нужны более сложные способы обработки строк или арифметические операции, это не входит в возможности оболочки, для этого используются обычные утилиты.

Переменные и вывод команд

Переменные не были бы настолько полезны, если бы в них невозможно было записать результат выполнения утилит. Для этого используется такой синтаксис:

$( команда )

С помощью этой конструкции вывод команды будет перенаправлен прямо туда, откуда она была вызвана, а не на экран. Например, утилита date возвращает текущую дату. Эти команды эквивалентны:

Понимаете? Напишем скрипт, где будет выводиться hello world и дата:

string1=»hello world »
string2=$(date)

Теперь вы знаете достаточно о переменных, и готовы создать bash скрипт, но это еще далеко не все. Дальше мы рассмотрим параметры и управляющие конструкции. Напомню, что это все обычные команды bash, и вам необязательно сохранять их в файле, можно выполнять сразу же на ходу.

Параметры скрипта

Не всегда можно создать bash скрипт, который не зависит от ввода пользователя. В большинстве случаев нужно спросить у пользователя какое действие предпринять или какой файл использовать. При вызове скрипта мы можем передавать ему параметры. Все эти параметры доступны в виде переменных с именами в виде номеров.

Переменная с именем 1 содержит значение первого параметра, переменная 2, второго и так далее. Этот bash скрипт выведет значение первого параметра:

Управляющие конструкции в скриптах

Создание bash скрипта было бы не настолько полезным без возможности анализировать определенные факторы, и выполнять в ответ на них нужные действия. Это довольно-таки сложная тема, но она очень важна для того, чтобы создать bash скрипт.

В Bash для проверки условий есть команда Синтаксис ее такой:

if команда_условие
then
команда
else
команда
fi

Эта команда проверяет код завершения команды условия, и если 0 (успех) то выполняет команду или несколько команд после слова then, если код завершения 1 выполняется блок else, fi означает завершение блока команд.

Но поскольку нам чаще всего нас интересует не код возврата команды, а сравнение строк и чисел, то была введена команда [[, которая позволяет выполнять различные сравнения и выдавать код возврата зависящий от результата сравнения. Ее синтаксис:

[[ параметр1 оператор параметр2 ]]

Для сравнения используются уже привычные нам операторы ,=,!= и т д. Если выражение верно, команда вернет 0, если нет — 1. Вы можете немного протестировать ее поведение в терминале. Код возврата последней команды хранится в переменной $?:

Теперь объединением все это и получим скрипт с условным выражением:

!/bin/bash
if [[ $1 > 2 ]]
then
echo $1″ больше 2″
else
echo $1″ меньше 2 или 2″
fi

Конечно, у этой конструкции более мощные возможности, но это слишком сложно чтобы рассматривать их в этой статье. Возможно, я напишу об этом потом. А пока перейдем к циклам.

Циклы в скриптах

Преимущество программ в том, что мы можем в несколько строчек указать какие действия нужно выполнить несколько раз. Например, возможно написание скриптов на bash, которые состоят всего из нескольких строчек, а выполняются часами, анализируя параметры и выполняя нужные действия.

Первым рассмотрим цикл for. Вот его синтаксис:

for переменная in список
do
команда
done

Перебирает весь список, и присваивает по очереди переменной значение из списка, после каждого присваивания выполняет команды, расположенные между do и done.

Например, переберем пять цифр:

for index in 1 2 3 4 5
do
echo $index
done

Или вы можете перечислить все файлы из текущей директории:

for file in $(ls -l); do echo «$file»; done

Как вы понимаете, можно не только выводить имена, но и выполнять нужные действия, это очень полезно когда выполняется создание bash скрипта.

Второй цикл, который мы рассмотрим — это цикл while, он выполняется пока команда условия возвращает код 0, успех. Рассмотрим синтаксис:

while команда условие
do
команда
done

Мастер Йода рекомендует:  Полный справочник по использованию клавиатуры в WordPress

!/bin/bash
index=1
while [[ $index

Как видите, все выполняется, команда let просто выполняет указанную математическую операцию, в нашем случае увеличивает значение переменной на единицу.

Хотелось бы отметить еще кое-что. Такие конструкции, как while, for, if рассчитаны на запись в несколько строк, и если вы попытаетесь их записать в одну строку, то получите ошибку. Но тем не менее это возможно, для этого там, где должен быть перевод строки ставьте точку с запятой «;». Например, предыдущий цикл можно было выполнить в виде одной строки:

index=1; while [[ $index

Все очень просто я пытался не усложнять статью дополнительными терминами и возможностями bash, только самое основное. В некоторых случаях, возможно, вам понадобиться сделать gui для bash скрипта, тогда вы можете использовать такие программы как zenity или kdialog, с помощью них очень удобно выводить сообщения пользователю и даже запрашивать у него информацию.

Выводы

Теперь вы понимаете основы создания скрипта в linux и можете написать нужный вам скрипт, например, для резервного копирования. Я пытался рассматривать bash скрипты с нуля. Поэтому далеко не все аспекты были рассмотрены. Возможно, мы еще вернемся к этой теме в одной из следующих статей.

Разработка консольных приложений и автоматизация задач на PHP: старый добрый язык как знакомая замена Bash

Автор: iNo // k0dsweb gr0up
Статья является собственностью команды KodsWeb (www.kodsweb.ru)
-= 06.09.2006 =-

Intro.

В данной статье я вкратце опишу shell-программирование, рассмотрю простейшие примеры и прокомментирую их. Сразу оговорюсь,что эта статья не является исчерпывающим руководством по shell-программированию. Но её будет достаточно чтобы освоить его основы. Несмотря на кажущуюся простоту shell-программирования, оно является достаточно мощным инструментом администратора unix-системы.Замечу,что для полноценного администрирования unix-системы, уметь программировать на shell просто необходимо. Все примеры протестированы на системе Slackware Linux 10.2 и полностью работоспособны.

Общие положения.

Комментарии начинаются с символа #, за исключением первой строки. Первой строкой сценария является путь к интерпретатору, начинающийся с #! с помошью которого будет запущен данный скрипт. Например:

Переменные, ввод и вывод данных.

Для задания переменных используется оператор присваевания «=». Синтаксис следующий:

Замечу,что в отличие от языков perl и php,между знаком «=» и остальными параметрами нельзя ставить пробел.В этом случае интерпретатор выдаст ошибку.Чтобы обратится к заданной переменной ,надо вызвать её поставив перед ней знак $.Удалить переменную можно с помощью оператора unset. Оператор Echo просто выводит строку(или переменную), идущую после него:

В данный пример также можно добавить одинарные или двойные кавычки, от этого результат работы программы не изменится. Но не стоит использовать обратные кавычки, т.к.эти символы используются для выполнения команд:

Оператор read присваевает значение переменной.Вот пример,который просит ввести переменную var,считывает её а затем выводит.

Агрументы командной строки.

Как и во всех консольных программах, в shell-сценарий можно передавать аргументы из командной строки.Переменные $1..$9 соответствуют параметрам, переданным из командной строки сценарию.Переменная $0 содержит имя интерпретируемого файла.$#-содержит количество переданных аргументов. $* и [email protected] содержат все аргументы,но в [email protected] все аргументы выделены кавычками. Напишем скрипт,который выводит 2 аргумента командной строки и имя исполняемого файла.Запуск скрипта: ./script.sh 1 2

Арифметические операции.

Арифметические операции производятся с использованием оператора let. Операции:

Синтаксис арифметических операций в Shell:

Оператор test или [].

Данные операторы предназначены для выполнения сравнений двух значений. Если сравнение успешно-оператор возвращает 0,иначе 1.Код завершения последней выполненной команды хранится в специальной переменной $?.

Синтаксис оператора test:

Ниже приведены все опции оператора test(или []):

Сравнение целых чисел:

Условия.

Ниже описан синтаксис всех условных операторов, с примерами.

Пример условия if . then:

Результат работы,при переданном параметре равном 10:

2) if then else fi

Пример if . then . else:

Результат работы,при переданном параметре равном 10:

Результат работы,при переданном параметре равном 7:

3) if then elif else fi

Пример if . then . elif . else:

Результат работы,при переданном параметре равном 10:

Результат работы,при переданном параметре равном 9:

Результат работы,при переданном параметре равном 8:

4) case in ) ;; *) ;; esac

Case-конструкция позволяет выбирать один из нескольких альтернативных вариантов.

Результат работы,при переданном параметре равном 1:

Результат работы,при переданном параметре равном 2:

Результат работы,при переданном параметре равном 10:

Циклы.

1) while do done

Оператор языка shell-программирования while выполняет команды, пока условие истино.
Пример:

2) until do done

Оператор until выполняет команды, пока условие ложно.
Пример:

Цикл for — выполняет команды для каждого параметра, который был передан сценарию в командной строке.
Пример:

Результат работы программы,с параметрами 1 2 3 4 5:

Эта конструкция отличается от обычного for тем, что параметры берутся не из командной строки, а из строки после оператора in.

Конструкция select создаёт меню на основе элементов заданного списка, а затем выполняет для него указанную команду.
Пример:

Случайная цитата

Достойный муж делает много, но не хвалится сделанным, совершает заслуги, но не признает их, потому что он не желает обнаруживать свою мудрость.

Разработка консольных приложений и автоматизация задач на PHP: старый добрый язык как знакомая замена Bash

Периодически возникает задача сделать интерактивное приложение под PHP. Обычно делается всё тупо и некрасиво — echo/fgets. Есть, понятно, и готовые библиотеки на этот счёт, но там, в общем-то, всё также некрасиво.

Следующая мысль — сделать что-то на ncurses. Но придётся делать целую прослойку для стандартных элементов интерфейса и взаимодействия их с приложением. Тоже долгая история. Но на её пути родилась такая цепочка. Для языка разметки форм хорошо бы задействовать тот же HTML → Надо писать хотя бы примитивный парсер форм → Хорошо бы для этого задействовать уже имеющиеся консольные браузеры → Консольный браузер итак может показывать HTML-страницы, выданные скриптом и отсылать запросы в него же, при этом в PHP5.4 появился неплохой встроенный Web-сервер.

И, вот, основная идея готова. Скрипт запускает web-сервер, потом — консольный браузер с запросом к этому серверу. Работаем привычно, как с любым Web-приложением, когда завершаем работу и выходим из браузера, сервер убивается. Получается удобно, красиво (для консоли) и без велосипедостроения.

А вот на практической реализации уткнулся в проблемы.

Хочется иметь автономный запускающий скрипт . С состоящим из двух частей — никаких проблем. Например, bash-запускалка и php -роутер, который проинициирует систему. Но удобно, когда скрипт один. Соответственно, в голову приходит два варианта:

— Комбинированный скрип, запускающийся как bash, продолжающийся как php . Ну, грубо говоря (концепт):

Этот вариант прекрасно работает, но, увы, мусорит на экран двумя хэшами. Я так и не поборол пока эту проблему.

Следующий вариант более «полноценный». Всё засунуть целиком в нормальный PHP- скрипт , из него запустить фоновым процессом php с web-сервером, запустить браузер, после выхода из последнего — всё за собой подчистить. Тут вылезла другая проблема. Единственный способ запустить браузер интерактивно, который я нашёл — это pcntl_exec(). Во всех остальных случаях он тупо ждёт ввода, ничего не выводя на экран, пока его не прибить (пробовал lynx, links, w3m).

Кроме того, возникали постоянные проблемы с работой фонового web-сервера, пока не засунул его запуск в pcntl_fork(). Текущий вариант такой:

Тут вылезла другая проблема. Всё отлично работает, пока не сделаешь выход. После выхода из браузера php — скрипт вываливается, не доходя до выполнения убийства web-сервера. Если после pcntl_exec(«/usr/bin/lynx») поставить логгирование в файл, то оно никогда не вызывается. Соответственно, после выхода из браузера мы оказываемся в консоли, но у нас в фоне остаётся запущенный web-сервер.

Есть у кого-нибудь мысли, как решить первую или вторую проблемы?

Удобная среда для разработки консольных приложений на языке Pascal

Посоветуйте, пожалуйста, удобную среду для разработки консольных приложений на языке Pascal. Под удобной, я подразумеваю следующее:

  • Наличие раскраски типов данных, операторов и т.п.
  • Наличие проверки синтаксиса сразу же при написании кода, в случае если есть ошибки, подчеркивает эти места.
  • Наличие функции дописывания названий переменных, функций, структур, классов и т.п. при вводе начальных букв.
  • Наличие хорошего поиска и замены. Например, становимся курсором на название переменной, выбираем «Переименовать», далее вписываем новое название, после чего переменная переименовывается только в тех местах, где она была видимая (а не тупо замена одного слова на другое). То же самое относиться и к функциям, классам и т.п.
  • Возможность перехода к месту объявления переменной, функции и т.п.
  • Наличие функции автоматического форматирования кода
  • Возможность сворачивать функции, после сворачивания отображает только название функции.
  • Встроенная документация, например, становимся курсором на нужную нам функцию и нажимаем «F1», открывает документация про эту функцию.

Может что-то забыл сюда написать, но думаю и так понятно, что я ожидаю от IDE.

Добавить комментарий