Разное

Bash in: Цитатник Рунета

Содержание

Bash.im — это… Что такое Bash.im?

bash.im
URL:

bash.im

Посещаемость:

статистика Openstat

Владелец:

Андрей Лавров[1]

Автор:

Андрей Лавров, Константин Груша (zoi)[2]

Начало работы:

2004 год

Текущий статус:

работает

«bash.im — Цитатник Рунета» — развлекательный Интернет-сайт, на котором публикуются присланные посетителями смешные, забавные фрагменты электронной переписки или произошедшие истории. Ресурс является одним из самых посещаемых юмористических ресурсов русскоязычного сегмента всемирной сети[3]. Ежедневная аудитория — более 350 тыс. читателей, не считая RSS-подписчиков[4].

В марте 2007 года bash.org.ru занял третье место в рубрике «Архив года» на сетевом конкурсе РОТОР[5]. В мае 2008 года bash.org.ru получил Гран-при РОТОР в рубрике «Юмористический сайт года»[6]. Согласно правилам, в 2009 году сайт в конкурсе не участвовал, но уже в сентябре 2010 года bash.org.ru занял первое место в рубрике «Юмористический сайт года»[7] РОТОРа.

История

Сайт был создан в 2004 году по аналогии с англоязычным bash.org представителем российского и башкирского аниме-фэндома Андреем Лавровым, известным под ником DarkRider. Изначальная база цитат была собрана Лавровым из архивов ботов, установленных на каналах IRC-сети RusNet, где общались поклонники аниме. Он же написал движок сайта и в январе 2004 года организовал хостинг у себя на работе — на корпоративном сервере ЗАО «АММ» в Уфе.

В дальнейшем базу пополняли читатели сайта, многие из которых и были посетителями цитируемых каналов. Из-за незначительного количества посетителей первоначально на сайте отсутствовала модерация и цитаты появлялись на сайте сразу же после добавления. По мере роста популярности количество цитат стало возрастать, и через несколько месяцев было введено предварительное отсеивание цитат по субъективным критериям модераторов.

Изначально цитировались только IRC-чаты, позже появились фрагменты переписки из других средств интернет-общения (программ мгновенного обмена сообщениями, форумов, блогов), а также высказывания и истории, присылаемые ежедневно посетителями сайта. С ростом популярности сайта некоторые посетители стали отправлять придуманные самостоятельно цитаты (так называемые «фейки», от англ. fake).

С сентября 2005 года ресурс был перенесён на сервер в Москве, где к Лаврову присоединился Константин Груша (zoi), отвечавший за хостинг[8].

С 1 августа 2007 года на сайте трижды в неделю публикуются небольшие комиксы, созданные по мотивам отдельных цитат. Большинство комиксов создают профессиональные художники издательства «Фабрика комиксов», изредка публикуются читательские работы.

29 октября 2007 года в 3:45 (MSD) сервер bash.org.ru подвергся массированной DDoS-атаке[9][10]. Одновременно с тем, как сайт был выведен из строя, по блогам была распространена информация о якобы изъятии серверов ФСБ[10]. 31 октября эффект от атаки удалось уменьшить, а 1 ноября работа сайта была восстановлена с открытием зеркала у норвежского провайдера Hostex Internet Services. С 9 ноября работа серверов восстановлена в полном объёме в датацентре РБК.

27 ноября 2007 года проект занял первое место в народном голосовании «Премии Рунета 2007»[11].

1 апреля 2008 года было добавлено 1355 цитат из книги Д. Э. Розенталя «Справочник по правописанию и литературной правке». Его фамилией они и были подписаны. Кроме того, на главной странице была вывешена следующая новость:

Сегодня, в начале второго квартала 2008 года, Российская академия наук рада сообщить о начале сотрудничества с известным архивом сетевого фольклора — Цитатником Рунета (bash.org.ru).

Стороны обязуются провести ряд мероприятий, направленных на повышение грамотности сетевого населения. Лозунг новой программы:

«БОР — это стопроцентная грамотность + интернетизация всей страны».

11 июля 2008 года добавлен автоматизированный архив с лучшими цитатами «Бездны», не попавшими на главную.

28 июля 2008 года Wordstream, штатный форум сайта закрыт администрацией[12]. Сначала на нём размещалась запись «Pool closed due to AIDS»[13], которая чуть позже была заменена на «Бассейн закрыт, в нём червие».

8 августа 2008 года главная страница, поиск и просмотр объединены в одно целое[14].

3 ноября 2008 года командой bash.org.ru был создан родственный сайт IT happens, ставивший перед собой аналогичные цели, что и изначальный ресурс, но имеющий узконаправленную программистскую специфику. Новый сайт предназначается для относительно длинных историй в отличие от bash.org.ru. Для начального наполнения нового сайта взяты истории, ранее опубликованные на bash.org.ru.

В декабре 2008 года «Bash.org.ru» занял второе место в предварительном народном голосовании «Премии Рунета 2008».[15]

1 апреля 2009 года в честь Дня смеха сайт и все цитаты были переведёны автоматическим переводчиком на белорусский язык.

1 апреля 2010 года в честь Дня смеха сайт и все цитаты были представлены в дореформенной орфографии и оформлены в стиле периодики того времени. В шапке сайта размещалась надпись «Е. И. В. Русскаго Эѳирнета Юмористіческий Вестникъ», на главной странице добавлена новость:

Господа!

Съ глубокимъ удовлетвореніемъ спешимъ сообщить вамъ прекрасную новость — возможно, лучшую съ момента начала изданія «Вѣстника». Сегодня, после длительной и всѣсторонней инспекціи, проведенной спеціальной комиссіей Имперской Коллегіи по Охранѣ Благопристойности Печати, было подписано Высочайшѣе распоряженіе, не только поднимающее классность нашаго изданія на одну ступень, но тако же и рекомѣндующее насъ въ качествѣ образца въ соблюденіи предписаній Цензурнаго Кодекса.

Каждый щелчокъ мыши, сдѣланный вами на тумблерахъ волеизъявленія, былъ маленькимъ шагомъ къ сегодняшнему тріумфу — отныне мы съ гордостью именуемся не просто Юмористическимъ Вѣстникомъ, но Е. И. В. Русскаго Эѳирнета Юмористическимъ Вѣстникомъ.

Съ благодарностью и наилучшими пожеланіями, искренне ваши, члены коллегіи редакторовъ «Вѣстника».

1 апреля 2011 года в честь Дня смеха на сайт были добавлены новые кнопки для голосования, такие как «ниасилил», «плакали всем офисом», «больше котиков!», «ниачём» и «в игнор!», при нажатии на которые появлялся соответствующий ответ.

1 марта 2012 года сайт сменил домен и полностью переехал с bash.org.ru на bash.im[16][17]

1 апреля 2012 года сайт заполонили котики, и просто смешные картинки от пользователей. На следующий день картинки были убраны, а также появилась подпись администрации: «Погуляли и хватит. Разумеется, у нас здесь не склад котиков, а всё серьёзно!»

Структура ресурса

Поскольку bash.im является цитатником, в статье для интересного чтения используются цитаты с самого ресурса. Как правило, вставляется оригинальный текст с авторской орфографией, но иногда добавляются исправленные версии без грубых выражений или с удалёнными бессмысленными репликами, во избежание загромождения статьи. Администрация сайта не против их использования при указании ссылки на источник.

Весь ресурс можно разделить на пять частей: Цитатник, Бездна, Комиксы, ныне удалённый раздел Видео и ЖЖ-комьюнити для обратной связи. Последнее располагается уже за пределами самого́ сайта на популярной блог-платформе LiveJournal, но, несмотря на это, является официальным, используется для обратной связи и регулярно просматривается администрацией. Поэтому его можно условно рассматривать как часть единого проекта.

Бездна

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

На основной странице «Бездны» выводится 25 случайно выбранных цитат. Если вы обновите страницу, то вам будет выдана следующая порция случайных цитат. В отличие от других страниц сайта, здесь нельзя просмотреть рейтинг. Это было сделано, чтобы избежать так называемого «стадного эффекта» — когда человек читает цитату и голосует за неё, исходя из её текущего рейтинга. Также частым явлением был пропуск пользователями цитат с низким рейтингом при чтении «Бездны», несмотря на то, что отрицательную оценку могли поставить люди с другим чувством юмора. Хотя показатель рейтинга отсутствует, вы всегда можете проголосовать за цитату, используя стандартные доступные инструменты сайта. Следует отметить, что цитаты с рейтингом ниже −5 через некоторое время автоматически скрываются от посетителей, и видны только аппруверам (модераторам).

Кроме основной страницы, в «Бездне» имеется так называемый «Топ Бездны». На ней отображается 25 цитат из «Бездны», которые имеют самый высокий рейтинг. Хоть в «Топе Бездны» и отображается количество набранных голосов, здесь отсутствуют инструменты для голосования. Это сделано, чтобы избежать искусственного поднятия (накрутки) рейтинга или же, наоборот, корыстного опускания неприятных читателю цитат.

Также в «Бездне» имеется так называемый архив лучшего Бездны. В нём отображаются цитаты, понравившиеся читателям «Бездны». Туда автоматически попадают цитаты с количеством голосов более 25, чаще всего они туда проходят через «Топ Бездны».

Максимальный срок жизни цитаты в «Бездне» не превышает 196 часов. За это время модераторы успевают её просмотреть. Тогда цитата удаляется из базы данных сайта или же попадает непосредственно в «Цитатник» (на главную страницу). При этом рейтинг цитаты обнуляется.

Цитатник

Это самый главный раздел ресурса bash.im. В «Цитатнике» содержатся одобренные модераторами цитаты из «Бездны». На главной странице сайта отображается 100 последних цитат именно из этого «Цитатника». Здесь над каждой цитатой есть её номер (идентификатор), инструменты голосования и текущий рейтинг. С 30 апреля 2008 года рейтинг цитат, добавленных за последние 24 часа скрывается; чтобы его увидеть необходимо проголосовать за цитату. А с 5 мая 2008 рейтинг новых цитат не виден даже после голосования[18]. До 15 апреля 2008 года там же отображался псевдоним одобрившего модератора. Следует также отметить, что ранее перед псевдонимом модератора добавлялась английская фраза «approved by» (рус. одобрена). Именно из-за этой фразы модераторов bash.org.ru принято называть аппруверами. Позднее данная информация была убрана из публичного доступа.

Кроме последних цитат, можно просмотреть все цитаты с сортировкой по рейтингу и по дате добавления или 50 случайных из «Цитатника». Также есть страница с набравшими наивысший рейтинг цитатами. Здесь отображается 10 лучших за сутки и по 25 цитат недели, месяца и года.

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

Особое отношение у администрации к переводным цитатам с других цитатников[19]. Если модератор во время рассмотрения цитаты на утверждение признал в ней перевод, то эта цитата не утверждается и удаляется. Если цитата попала в «Цитатник» и потом выяснилось, что она переводная, то её судьба зависит от рейтинга. Если она набрала меньше 100 (меньше 500 за сутки) голосов, то её удаляют, если больше — снабжают ссылкой на источник.

Комикс-стрипы

С 1 августа 2007 года начали выходить комикс-стрипы по мотивам цитат, по одному каждый понедельник, среду и пятницу. Они рисуются, как правило, знакомыми модераторам художниками, но иногда публикуются и работы читателей. Такое, например, произошло с комиксом автора Die Dakishimete, которая анонимно опубликовала ссылку на свою работу в официальном ЖЖ-сообществе, а потом её комикс-стрип появился на bash.org.ru[20].

Видео

С 20 июля 2008 года размещаются короткие видеоролики по мотивам цитат. Большинством посетителей «Башорга» видеоролики характеризуются отрицательно и часто вызывают аллюзии на телепередачу «Аншлаг». На данный момент раздел удалён из-за постоянных жалоб и выражения недовольства посетителей ресурса ввиду некомпетентности отснятого материала.

BOR.wordstream

Администрация проекта приурочила введение нового раздела к получению премии «Рунета». Данный раздел представлял собой смесь форума и «Бездны» — только зарегистрированный пользователь мог добавить своё сообщение, которое будет отображаться в специальном разделе «Бездны». Остальные пользователи получали возможность оставить комментарий к этому сообщению. Содержимое основного сайта и доски сообщений никак не пересекалось. В конце июля 2008 года раздел был закрыт администрацией.

Модераторы

Начиная с весны 2008 года модерирование сайта производится анонимно, однако известны следующие модераторы: DarkRider (автор проекта и разработчик), zoi (хостер и разработчик), aalien, Creator, octopus, Asuka, jozhig и Biolante.

Популяризованные мемы

Возможно, этот раздел содержит оригинальное исследование.

Добавьте ссылки на источники, в противном случае он может быть удалён.
Дополнительные сведения могут быть на странице обсуждения.

  • Как пропатчить KDE2 под FreeBSD?. Цитата стала настолько популярна, что вопрос задавался В. В. Путину на интернет-конференции 6 июля 2006 года[21] и 28 декабря 2007 года на интернет-конференции президенту Украины В. А. Ющенко[22], а также президенту Казахстана Н.А. Назарбаеву[23].
  • «Йа криведко».
  • «Капитан Очевидность».
  • «Урановые ломы».
  • «Чувак с долларами».
  • «Костик, 11 лет».
  • «Бугога» — цитата, породившая исследования машинного кода, представленного в ASCII словом bugoga.
  • «Эмо-асфальтоукладчик».
  • «Я — маленький апельсин», созданный по мотивам рекламы сока.
  • Распространены шутки о летающих котах, шрёдерах, пельменях, блондинках, гопниках, эмо и Ктулху.

Критика «Башорга»

Коммерциализация

Весной 2007 года администрация стала размещать рекламу на страницах сайта, объясняя это повышением затрат на содержание сервера из-за увеличения нагрузки. Реклама на страницах ресурса размещается в виде графических баннеров или блоков с текстом, которые отличаются от цитат только цветом текста. Такая текстовая реклама содержит условно-юмористический текст, часто оформленный в виде цитаты, и ссылку на рекламируемый продукт или ресурс. Многие читатели негативно отреагировали на коммерциализацию сайта, однако после появления рекламы популярность сайта не снизилась.

Комментарии к цитатам

Некоторые цитаты вызывают у читателей стремление их обсудить из-за содержания недостоверных фактов, желания рассказать про аналогичный случай или просто высказать своё мнение. Для подобных случаев администрацией было специально создано коммьюнити на платформе LiveJournal, которое, однако, не стало популярным, и читатели предпочитают обсуждать цитату в самой «Бездне». Для этого пользователь копирует текст цитаты, дописывает внизу свой комментарий и добавляет на сайт как новую цитату. Сразу оказавшись в «Бездне», откомментированная цитата может побудить остальных пользователей ответить на комментарий или высказать другую точку зрения. Для решения этой проблемы было предложено добавить возможность оставлять комментарии для каждой цитаты. Разработчики bash.org.ru это предложение проигнорировали, а большая часть посетителей высказалась против такого нововведения.

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

AJAX-голосование

До 30 апреля 2008 каждый раз при голосовании на bash.org.ru открывалась отдельная страница с цитатой, которая содержала рекламные блоки. Это увеличивало потребление трафика и создавало неудобства при чтении, так как приходилось возвращаться назад. 1 декабря 2007 года в «Wordstream» и «Бездне» для всех, чьи браузеры поддерживают JavaScript, сделано голосование без перезагрузки страницы. С 30 апреля 2008 года везде на сайте стала использоваться технология AJAX.

Изменение стиля

С момента создания «Башорга» к настоящему времени стиль цитат существенно изменился: при создании сайт содержал преимущественно цитаты, связанные с профессиональным околокомпьютерным юмором. Часть ранних цитат может быть непонятна человеку со стороны, требовала профессиональных знаний программиста либо системного администратора. С увеличением посещаемости сайта количество подобных цитат существенно уменьшилось, и возросло количество цитат с бытовым юмором, фрагментами известных анекдотов и историй, различными «баянами». В результате появился сайт ibash.org.ru, старающийся следовать оригинальной концепции размещения компьютерного юмора.

Другие проекты

  • 3 ноября 2008 года основатели bash.org.ru создали сопутствующий ему проект IThappens.ru, в котором публикуют «истории про рыцарей консоли и паяльника». В этом качестве выступают как переделаные в истории цитаты из «Бездны», так и специально присланные материалы.
  • Также запущен проект zadolba.li с историями продавцов о надоевших им покупателях и наоборот.
  • После целой волны цитат, негативно встреченной читателями как депрессивно-бессмысленные[источник не указан 654 дня], поклонниками Башорга был создан сайт killmepls.ru, где собираются цитаты о различных несчастьях.

Примечания

Ссылки

Цикл For c Описанием и Примерами

VPS

access_time

3 июня, 2020

hourglass_empty

4мин. чтения

Цикл for — один из основных циклов в разных языках программирования. В этом руководстве, как уже понятно из названия — “Bash: Цикл For” — мы объясним, как он используется в языке программирования bash. Так что приготовьтесь добавить новый инструмент в ваш арсенал разработчика!

Цикл for — оператор итерации. Это значит, что он позволяет выполнять код повторно. Допустим, вы хотите запустить одну и ту же инструкцию 5 раз. Вместо того, чтобы писать пять отдельных кусков кода, вы можете просто написать синтаксис цикла for один раз. Давайте разбираться, как работает цикл for более детально?  

Синтаксис Цикла For в Bash

По сути, самый простой синтаксис цикла for перебирает список простых значений. Обычно это выглядит так:

for VARIABLE in 1 2 3 4 5 .. N
Perform the below command:
    command1
    command2
    commandN
done

На деле этот синтаксис будет выглядеть следующим образом:

#!/bin/bash
for i in 1 2 3 4 5
do
 echo "Hello $i"
done

Выполнение файла bash приведёт к появлению следующего текста:

Hello 1
Hello 2
Hello 3
Hello 4 
Hello 5

Давайте разберём каждый элемент:

  • #!/bin/bash — показывает, что код является скриптом bash
  • i — это плейсхолдер для переменной. Между тем, $i — это индивидуальное значение переменной. Вы также можете записать это как c/$c или любым другим именем
  • in — разделяет переменную и элементы, что следуют за ней
  • 1 2 3 4 5 — это пример элементов, над которыми вы хотите выполнить инструкцию
  • do — это ключевое слово, которое запускает циклы. Затем оно выполнит инструкцию энное количество раз, при этом n — это общее количество элементов. Здесь значение n равно 5
  • echo “Hello: $i” — код, который мы будем повторять энное количество раз. Помните, что кавычки превращают что-либо внутри них в одну переменную.
  • done — останавливает цикл

Вы можете написать код по-разному в зависимости от версии bash, которую вы используете.

Bash версии 3.0+ позволяет сокращённо задавать диапазон с помощью “. .”.

#!/bin/bash
for i in {1. .5}
do
  echo "Hai $i"
done

Bash версии 4.0+ позволяет использовать синтаксис {START. .END. .INCREMENT}.

#!/bin/bash
for i in {0. .8. .2}
do
  echo "Hai $i"
done

Результат будет выглядеть следующим образом:

Hai 0
Hai 2
Hai 4
Hai 6 
Hai 8

Другие распространённые варианты синтаксиса:

for VARIABLE in file1 file2 file3
do
    command1 on $VARIABLE
    command2
    commandN
done

Или так:

for OUTPUT in $(Linux-Or-Unix-Command-Here)
do
    command1 on $OUTPUT
    command2 on $OUTPUT
    commandN
done

Цикл For в Bash: Примеры

Вы можете обновить синтаксис для выполнения нескольких операций. Помните, что перед тем, как что-либо делать, вам необходимо зайти на свой VPS-сервер. Если вы сомневаетесь, как это сделать, вам поможет это руководство.

Между тем, если у вас возникли проблемы с bash, рекомендуем прочесть общее руководство по bash (англ). Помните, что функции bash должны быть в файле .sh. Чтобы создать его, запустите следующую команду в командной строке:

vim NameOfFile.sh

Эта команда создаст файл .sh и откроет его в редакторе VIM. Опять-таки более детально это описано в вышеупомянутом руководстве по базовым функциям bash.

Используем Bash-цикл For для Создания Бесконечного Цикла

После активации этот цикл будет выполнять код до тех пор, пока вы не остановите его, нажав Control + C. В этом случае термин «Hello World» будет появляться снова и снова сам по себе.

#!/bin/bash
for (( ; ; ))
do
  echo "Hello World!"
done

Цикл For с Тремя Выражениями в Bash

Цикл состоит из трёх записывающих выражений — инициализатора, или начального значения переменной (EXP1), условия окончания цикла (EXP2) и выражения, вычисляемого после каждой итерации (EXP3). Иногда люди называют его циклом в стиле C из-за близкого сходства в структуре кода с этим языком программирования. Синтаксис цикла выглядит следующим образом:

for (( EXP1; EXP2; EXP3 ))
do
    command1
    command2
    command3
done

А вот рабочий пример, который вы можете попробовать повторить сами:

#!/bin/bash
for (( c=1; c<=5; c++ ))
do  
  echo "Hai $c"
done

Начальное значение, указанное в коде, равно 1. Цикл будет выполняться, до тех пор пока условие в EXP2 истинно (true), в данном случае, это означает, что оно не должно быть больше 5. Знак, ++, в свою очередь, означает инкремент, или увеличение на 1. Цикл будет повторяться один за другим, начиная с начального значения. Результат:

Hai 1
Hai 2
Hai 3
Hai 4 
Hai 5

Управление Циклами Bash: Цикл For с Пропуском и Продолжением

Оператор continue пропускает одну итерацию цикла и переходит к следующей. Вот как выглядеть синтаксис такой операции:

for I in 1 2 3 4 5
do
 if [condition]
 then
    continue   #Перейти к следующей итерации I в цикле и пропустить инструкцию 3
 fi
 statement
done

Следуя синтаксису, мы можем сказать bash пропустить выполнение одной итерации, а затем продолжить цикл:

for i in {1..5}
do
  if [[ "$i" == '4' ]]
  then
    continue
  fi
  echo "Hai $i4"
done

Вывод:

Hai 1
Hai 2
Hai 3
Hai 5

Поскольку значение 4 соответствовало инструкции continue, цикл не выполнил код и перешел к следующему значению — 5.

Управление Циклами Bash: Цикл For с Перерывом

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

for I in 1 2 3 4 5
  do
  if [condition]
  then
    break
  fi
  statement
done

При использовании этой функции наш код будет выглядеть так:

for city in Manila Bangkok Jakarta Kuala Lumpur
do
  if [[ "$city" == 'Jakarta' ]]; then
    break
  fi
  echo "city: $city"
done

echo 'Yes, that’s all!'

И, наконец, вывод:

city: Manila
city: Bangkok
Yes, that’s all!

Оператор сообщает циклу прервать операцию, когда условие выполнено (термин Джакарта найден). Затем он выполнит второй код, а именно ввод текста “Да, это всё!” (“Yes, that’s all!”).

Краткое Изложение

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

Всё, что вам нужно сделать, это разобраться в синтаксисе. Цикл for имеет довольно высокий порог вхождения, но мы уверенны, что чтение этой вступительной статьи — хорошее начало. Всё остальное — дело практики. Удачи!

Все, что вам нужно знать о Bash For Loops в Linux

Сценарии Bash – это высокоэффективное средство автоматизации задач, особенно тех, которые используют преимущества других существующих программ. Эта автоматизация часто требует повторения аналогичной операции несколько раз, и именно здесь цикл for вступает в свои права.

Системные администраторы Linux и Mac обычно знакомы со сценариями через терминал, но даже пользователи Windows могут принять участие в работе с подсистемой Windows для Linux .

Как работают скрипты Bash

Сценарий bash – это простой текстовый файл, содержащий серию команд, которые оболочка bash может читать и выполнять. Bash – это оболочка по умолчанию в macOS до Catalina и в большинстве дистрибутивов Linux.

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

Сначала создайте следующий файл в удобном месте (в идеале откройте терминал и сначала перейдите в нужный каталог):

 #!/bin/bash
echo "Hello, World"

Первая строка сообщает тому, что запускает эту программу, как ее запускать (то есть с помощью интерпретатора bash). Вторая – это просто команда, подобная любой другой, которую вы можете ввести в командной строке. Сохраните этот файл как hello_world.sh , затем:

 $ chmod +x hello_world.sh
$ ./hello_world.sh

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

Если вы видите слова «Hello, World», напечатанные в строке вашего терминала, значит, все работает должным образом.

Как работают циклы For

В общем программировании существует два основных типа цикла for: числовой и foreach . Числовой тип традиционно является наиболее распространенным, но при использовании bash обычно наоборот.

Числовые циклы for обычно фокусируются на одном целом числе, которое определяет, сколько итераций будет выполнено, например:

 for (i = 0; i < 100; i++) {
/* statements to execute repeatedly */
}

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

Циклы Foreach, напротив, обычно работают со структурами, такими как списки или массивы, и повторяются для каждого элемента в этой коллекции:

 people = [ "Peter", "Paul", "Mary" ]
foreach (people as person) {
if (person == "Paul") {
...
}
}

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

 people = [ "Peter", "Paul", "Mary" ]
for (person in people) {
if (person == "Paul") {
...
}
}

For in Loops

В bash чаще встречается цикл foreach или for in . Базовый синтаксис прост:

 for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

Например, чтобы перебрать три файла с явно указанными именами:

 for file in one.c two.c three.c
do
ls "$file"
done

Если такие файлы существуют в текущем каталоге, вывод этого сценария будет:

 one.c
two.c
three.c

Вместо фиксированного набора файлов список можно получить с помощью шаблона глобуса (один включает подстановочные знаки – специальные символы, представляющие другие символы). В следующем примере цикл for выполняет итерацию по всем файлам (в текущем каталоге), имена которых заканчиваются на «.xml»:

 for file in *.xml
do
ls -l "$file"
done

Вот пример вывода:

 $ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

Это может выглядеть очень скучно:

 $ ls -l *.xml

Но есть существенная разница: цикл for выполняет программу ls 2 раза, каждый раз передавая ему одно имя файла. В отдельном примере ls шаблон glob (* .xml) сначала сопоставляет имена файлов, а затем отправляет их все как отдельные параметры командной строки одному экземпляру ls .

Вот пример, в котором используется программа wc (подсчет слов), чтобы сделать разницу более очевидной:

 $ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

Программа wc подсчитывает количество строк в каждом файле отдельно, а затем выводит общее количество строк по всем из них. Напротив, если wc работает в цикле for:

 for file in *.xml
do
wc -l $file
done

Вы по-прежнему будете видеть счетчик для каждого файла:

 44 feed.xml
231 sitemap.xml

Но общего итогового итога нет, потому что wc запускается изолированно при каждой итерации цикла.

Когда список не является списком

При работе с циклами for возникает очень простая и распространенная ошибка, связанная с тем, как bash обрабатывает аргументы / строки в кавычках. Перебирать список файлов нужно так:

 for file in one.c two.c

Не так:

 for file in "one.c two.c"

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

 FILES="one.c two.c"
for file in $FILES
do
...
done

Обратите внимание, что само объявление переменной должно заключать свое значение в двойные кавычки!

Без списка

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

 #!/bin/sh
for a
do
echo $a
done

Затем выполнение args.sh даст вам следующее:

 $ ./args.sh one two three
one
two
three

Bash распознает этот случай и рассматривает do как эквивалент для в $ @ do, где $ @ – специальная переменная, представляющая аргументы командной строки.

Эмуляция традиционного числового цикла For

Сценарии Bash часто имеют дело со списками файлов или строками вывода других команд, поэтому часто используется цикл for in. Однако традиционная операция в стиле c по-прежнему поддерживается:

 for (( i=1; i<=5; i++ ))
do
echo $i
done

Это классическая форма из трех частей, в которой:

  1. переменная инициализируется (i = 1) при первом обнаружении цикла
  2. цикл продолжается, пока выполняется условие (i <= 5)
  3. каждый раз в цикле переменная увеличивается (i ++)

Итерация между двумя значениями является достаточно распространенным требованием, поэтому существует более короткая и менее запутанная альтернатива:

 for i in {1..5}
do
echo $i
done

Расширение фигурных скобок эффективно переводит приведенный выше цикл for в:

 for i in 1 2 3 4

Более точное управление циклом с прерыванием и продолжением

Более сложные циклы for часто нуждаются в способе преждевременного выхода или немедленного перезапуска основного цикла со следующим значением по очереди. Для этого bash заимствует операторы break и continue, которые распространены в других языках программирования. Вот пример, в котором оба используются для поиска первого файла длиной более 100 символов:

 #!/bin/bash
for file in *
do
if [ ! -f "$file" ]
then
echo "$file is not a file"
continue
fi
num_chars=$(wc -c < "$file")
echo $file is "$num_chars characters long"
if [ $num_chars -gt 100 ]
then
echo "Found $file"
break
fi
done

Цикл for здесь работает со всеми файлами в текущем каталоге. Если файл не является обычным файлом (например, если это каталог), оператор continue используется для перезапуска цикла со следующим файлом по очереди. Если это обычный файл, второй условный блок определит, содержит ли он более 100 символов. Если это так, оператор break используется для немедленного выхода из цикла for (и достижения конца скрипта).

Вывод

Сценарий bash – это файл, содержащий набор инструкций, которые могут быть выполнены. Цикл for позволяет многократно повторять часть скрипта. С помощью переменных, внешних команд и операторов break и continue сценарии bash могут применять более сложную логику и выполнять широкий спектр задач.

Связанный

Сценарий оболочки

— Как использовать Bash для sh в Ubuntu

Существует несколько программ, реализующих язык / bin / sh . В Ubuntu / bin / sh — это тире, который разработан, чтобы быть быстрым, использовать небольшой объем памяти и не поддерживает намного больше, чем минимум, ожидаемый от / bin / sh . В RHEL / bin / sh — это bash, который работает медленнее и использует больше памяти, но имеет больше функций. Одной из этих функций является оператор == для условного синтаксиса [.Dash поддерживает [, которая является базовой функцией sh, но не имеет оператора == , который является расширением bash (а также ksh и zsh).

Вы можете переключить вашу систему на использование bash. В Ubuntu / bin / sh — это символическая ссылка на тире . Вместо этого вы можете сделать это символической ссылкой на bash . Текущие версии Debian и Ubuntu (и производных) делают этот вариант установки тире. Чтобы его изменить, запустите

  sudo dpkg-reconfigure dash
  

и ответьте «да», чтобы сохранить тире как / bin / sh , или «нет», чтобы переключиться на bash.

Вы можете оставить bash как / bin / sh , но это сделает вашу систему немного медленнее. Возможно даже, что какой-то системный сценарий несовместим с bash, хотя это маловероятно, поскольку bash в основном является надмножеством dash.


Для дистрибутивов, у которых нет интерфейса для выбора между реализациями / bin / sh , вот как переключиться на bash.

  sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash / bin / sh
  

Не закрывайте терминал и убедитесь, что после этого вы все еще можете запускать некоторые сценарии sh .Если вы испортите эту команду, ваша система станет непригодной для использования. (Между прочим, причина, по которой я использовал несколько приведенных выше команд, а не простой sudo ln -sf bash / bin / sh , заключается в том, что ln -sf не является атомарным. Для восстановления этой операции вам потребуется загрузиться с загрузочного носителя. Напротив, mv является атомарным.)

Для восстановления тире как / bin / sh :

  sudo ln -s dash / bin / sh.бросаться
sudo mv /bin/sh.dash / bin / sh
  

Обратите внимание: если sh в вашем дистрибутиве по умолчанию равен / bin / bash , переключение на dash может привести к сбою скриптов, потому что bash имеет гораздо больше возможностей, чем dash. Скрипты Bash должны начинаться с #! / Bin / bash , а скрипты, начинающиеся с #! / Bin / sh , не должны использовать специфичные для bash функции, но дистрибутивы, которые поставляются с bash как / bin / sh , могут использовать bash -специфические функции в сценариях #! / bin / sh , которые относятся к этому дистрибутиву (это нормально, если нет никаких ожиданий, что пользователи могут переключиться на dash как / bin / sh , и нет никаких ожиданий, что эти сценарии будут работать на другая раздача).

Определение Bash от Merriam-Webster

\ ˈBash

\

переходный глагол

1

: для сильного удара : для нанесения удара

также

: нанести ранение или повреждение ударом : разбить

— часто используется с в

2

: для физической или словесной атаки

пресса избивает знаменитостей

оттолкнуть

Британский, неформальный

: усердно над чем-то работать

Это именно то, что я говорю себе, когда ухожу в спортзале… — Джей Рейнер

бить по

Британский, неформальный

: продолжать работать над чем-то : продолжать

… Я гораздо менее уверен в том, кем я должен быть или чем занимаюсь во времена неоспоримого среднего возраста.Думаю, я буду продолжать, как всегда, и надеюсь, что не покажусь слишком смешной, когда это сделаю », — Бекки Шивз.

вышибить

Британский, неформальный

: для быстрого производства (чего-то) : взрыва

Три года назад Piaggio разочаровал энтузиастов, прекратив производство ретро Vespa.Но индийская компания LML продолжала трепать копии, которые улетали у дилеров, особенно в Италии… — Харриет Ридли

взбесить

в основном британский, неформальный

: атаковать (кого-то) физически : ударить (кого-то) многократно

Судьи высмеивают или даже избивают [= избивают] в школах, колледжах и лигах по крикету — это не редкость.- Аяз Мемон

2

: праздничное собрание : вечеринка

3
в основном британский

: попытка, попытка

покушаться

Введение в Bash (оболочка) и управление файлами и директориями из командной строки | Наука о данных о Земле