LINUX.ORG.RU

Немного мыслей про bash, какой-то он не очень

 ,


0

1

Захотелось изучить программирование, просто ради интереса. Посоветовали bash, потому что несложный (так мне сказали). Но вот синтаксис что-то не обрадовал. Мне одному показалось что он какой-то не от мира сего? По сравнению с тем же питоном и Си... код на баше выглядит каким-то непонятным, я бы сказал чрезмерно усложненным. Но ради чего это усложнение- непонятно.

А еще куча мелких нелогичностей всплывает по мере изучения. Например, условия сравнения.

Флажки (-lt, -gt и т.д.) работают только для чисел, а знаки (>, < и т.д.) только для строк- ну кто придумал эту тупость? Зачем придумывать дублирующий функционал (вот эти флажки), а потом намерено делать так, чтобы одно работало только с числами, а другое только со строками?

И много еще такой фигни в баше?)


Ответ на: комментарий от anonymous

Гейдев и десктопные приложения самого разного толка, сейчас как раз тренд такой что даже у меня с пару десятков используемых приложений на qtwebkit/электроне наберётся. Просто потому что они на порядки лучше аналогов на плюсах и прочих дотнетах.

Это потому, что мамкины хацкеры теперь могут в две строки написать месенджер или блокнотик. И они начинают считать себя программерами. Проблемы начинаются тогда, когда нужно написать что-то посложнее. Тогда начинаются вопросы по потреблению ресурсов. Или вы думаете, что простота написания программ дается бесплатно? Думаю, не для кого не секрет, что почти весь более-менее нормальный софт на электроне жутко тормознутый. И чтобы добиться более-менее нормального перформанса нужно приглашать человека которые реально понимает что происходит под капотом. Но это уже не уровень мамкиного хацкера. Получается, что на нормальных языках программирования / фреймворках можно сразу писать нормально, а на электроне ты пишешь то, что потом придется знатно оптимизировать. Уровень затрат получается тот же результат на электроне - хужу. Так почему бы сразу не сделать нормально?

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

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

anonymous
()
Ответ на: комментарий от divlns

Вот и правда интересно, почему? Просто баш достаточно хорош и всех устраивает? Или никто не хочет перемен, чего-то попроще, переучиваться лень?

В Линукс нужен стандартный базовый интерпретатор и это bash

ism ★★★
()
Последнее исправление: ism (всего исправлений: 1)
Ответ на: комментарий от anonymous

А ты «упоротый», только не понятно на чём: на Сях или пистоне? Если нужда возникнет, по какому из пунктов стоит тебя кастовать?

Я упорот на получении конкретного результата максимально эффективным способом. А потому имел дело много с чем; из языков программирования - Basic (QBasic, VB), Pascal (Turbo Pascal, Delphi), C, C++ (Turbo C, gcc, Borland C Builder, Visual Studio), Assembler (tasm, masm), bash, python, JavaScript, php ну и всякие vim script, JScript, lua и т. п. На самом деле после определенного этапа начать писать на новом языке программирования не представляет особого труда. Что-то знаю лучше, что-то хуже. Но моя сильная сторона - понимание для какой задачи какой инструмент лучше подходит; плюс, если нужно что-то новое освоить, у меня это получается быстро, так как есть база.

Например, поправить исходники wacom драйвера чтобы задать нужную мне sensistivity (там не вывели это в параметры), автоматизировать какую-то рутину на bash, сделать трансформацию модели в Sparx Enterprise Architect на JScript, написать плагинчик для vim, который облегчает мне создание заметок, а потом скормить эти заметки скриптику на python чтобы он из них мне сделал тест знаний перед экзаменом. Ну и т. п.

Kroz ★★★★★
()
Ответ на: комментарий от anonymous

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

VS тоже говорят не тормозит. А Скайп, и Слак (по крайней мере когда я им пользовался) отжирали уйму ресурсов и тормозили.
Электрон не проще. Он просто создает видимость быстрого результата, но чтобы создать что-то по-настоящему хорошее он требует такого же effort'а.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от divlns

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

К советчикам баша как первого языка советую относится скептически.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

К советчикам баша как первого языка советую относится скептически.

Ни одного не помню в трэде. Разве был такой?

zvezdochiot

anonymous
()
Ответ на: комментарий от Deleted

Прямо в сообщении ОПа.

Т.е. ТС сам себе bash советует? Разговор «сам с собой», так сказать? Лол.

zvezdochiot

anonymous
()

Но вот синтаксис что-то не обрадовал.

Да все с ним нормально. Привыкнуть нужно

#! /bin/bash

TCOL="#7c818c"   
ACOL="#5294e2"   
PCOL="#7c818c"

MPDSTATE=$(mpc | sed -e '2 !d' -e 's/^.*\[//' -e 's/\].*$//')

if [ $MPDSTATE == "playing" ]; then
    echo "<fc=$ACOL>$(mpc current | sed "s/ - /\<\/fc\> - \<fc=$TCOL>/")</fc>"
elif [ $MPDSTATE == "paused" ]; then
    echo "<fc=$PCOL>$(mpc current)</fc>"
fi
Odalist ★★★★★
()
Ответ на: комментарий от Odalist

К советчикам баша как первого языка советую относится скептически

Да все с ним нормально.

Anakros, накаркал, блин!

zvezdochiot

anonymous
()
Ответ на: комментарий от Kroz

Но Питон не содержит (точнее скрывает) некоторые концепты, которые важно понимать программисту: типы, указатели и т. п.

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

WDWTFWW
()
Ответ на: комментарий от gremlin_the_red

К такому?

Я не пойму, что тут такого сложного...

$ declare -A my_array
$ my_array=([foo]=bar [baz]=foobar)
$ for key in "${!my_array[@]}"; do echo "$key"; done
baz
foo
Odalist ★★★★★
()
Ответ на: комментарий от Odalist

Я не пойму, что тут такого сложного...

Ну, как бы 19 различных небуквенных символов из 24 символов вообще, причём, они каждый раз означают разное. Очень много надо знать далеко неочевидного. BNF баша надо заучивать наизусть, иначе ничего не поймёшь.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от Deleted

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

Да я и не собирался работать программистом, просто решил попробовать что-то новое, раз уж с Си не срослось в свое время. Возможно нет способностей к этому, а может просто Си отбил желание. Может быть тогда был неправильный подход (у меня был один только учебник, и не с кем посоветоваться), а может именно Си не зашел. Может Си это для продвинутых, а я слишком туп для него. Но я решил попробовать снова, теперь на баше, может что и получится. Двигаюсь медленно, по пока понимаю все что изучаю. А там глядишь и мотивация подскочит для чего-то более серьезного...

divlns
() автор топика
Ответ на: комментарий от gremlin_the_red

arr+=([${i%=*}]=${i#*=})

Жестко... Но что-то подсказывает, что это сильно сокращенное выражение, наверняка можно расписать и поразвесистей, но чтоб было понятно. Я честно говоря не поклонник утрамбовывать строки кода до неприличия, лишь бы ставить рекорды аля «я напишу эту прогу с 4х строк!». Кто-то знаю и комментарии не пишет в коде никогда, а потом приходит на работу новичок и ничего не понимает, постоянно тыркает коллег почем зря. Ну и такие сокращения наверно больше от понтов, наверняка на производительность (быстродействие) программы это никак не влияет, хотя могу ошибаться.

divlns
() автор топика
Ответ на: комментарий от WDWTFWW

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

Очевидно, говоришь?
5 - это число 8 бит, 16 бит или 32 бит?
Для задач, для которых предназначен питон это, не важно. А для задач, для которых предназначен Си, это важно.
Для действительно очевидных вещей, например, в C++ есть такая штука как auto.

Зато в питоне через пятую точку делается много такого, что на С/С++ делается просто. Про копирование, передачу по значению ты уже упомянул; например, когда из функции нужно вернуть значение в одном из параметре (а не как return). Еще добавлять проверки в начало каждой функции, что параметр 1 в функции сложения - это именно число, а не строка, не объект - Си это делает на этапе компиляции. А документацию ты пытался генерить из питоновского кода? Там даже ввели такую штуку как Type Hinting, когда поняли что без типов совсем грустно.

Я люблю Питон. Как и С++. Просто считаю что сравнивать их некорректно: они для разных задач.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от divlns

комментарии не пишет в коде никогда,... на производительность программы это никак не влияет

Да сколько ж можно то.

  • Не «код», а набор команд
  • Не «программа», а скрипт

Как то посерьёзней надо, как-никак 3-яя страница трэда!

zvezdochiot

anonymous
()
Ответ на: комментарий от divlns

просто решил попробовать что-то новое

Относись к bash, как к прикладному скриптингу — скопировать, переименовать, распаковать ну и т.д. Писать на нем что-то, это все равно, что писать батники. Он без mkdir даже директорию сам не создаст.

anonymous
()
Ответ на: комментарий от divlns

Не вижу ничего страшного в написаном, это легко читается если знать что такое parameter expansion. В чём проблема вообще?

anonymous
()
Ответ на: комментарий от anonymous

В чём проблема вообще?

«Проблема» в том, что ТС думает, что скрипт должен быть написан так, чтобы ему было понятно, а не «парсеру». :)

zvezdochiot

anonymous
()
Ответ на: комментарий от Kroz

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

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

anonymous
()
Ответ на: комментарий от anonymous

«Проблема» в том, что ТС думает, что скрипт должен быть написан так, чтобы ему было понятно, а не «парсеру». :)

Можно ведь чтоб обоим было хорошо)

divlns
() автор топика
Ответ на: комментарий от divlns

Можно ведь чтоб обоим было хорошо

Нет. Хорошо должно быть только одному, и это не ты. А тебе будет хорошо, только если «парсер» прочтёт набор команд именно так, как ты задумывал, даже если они тебе не очень понятны!

zvezdochiot

anonymous
()
Ответ на: комментарий от gremlin_the_red

Из этого следует, что был ещё Bourne shell, а до этого просто shell.

Просто shell - это и есть Bourne shell. Борн - это фамилия его автора.

bigbit ★★★★★
()

Удивлён, как ТСу ещё не посоветовали Ruby?

Pyzia ★★★★★
()
Ответ на: комментарий от Pyzia

Это что, какой-то местный бог баша

Скорее местный фанатик. Аналог эдика с Си/КОИ-8.

RazrFalcon ★★★★★
()
Ответ на: комментарий от Deleted

Баш изучается на достаточном уровне за один рабочий день

Ну уж нет. За один день народ даже файлики с пробелами не научается удалять. А из гугла можно такого говна понатащить, что былая уязвимость в скриптах dhcp покажется семечками.

legolegs ★★★★★
()

а у меня бэш нормально заходит

burato ★★★★★
()
Ответ на: комментарий от legolegs

А из ЛОРа можно такого говна понатащить, что былая уязвимость в скриптах dhcp покажется семечками.

Пофиксил

burato ★★★★★
()
Ответ на: комментарий от anonymous

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

Правильно. Если тебе нужно на вход число, то в Си ты говоришь: параметр имеет тип int. И тебе не нужно дополнительно писать что «если на вход пришло не число то...», потому как в Си это делает за тебя компилятор.

В целом, несколько иной подход не оказывает никакого негативного влияния на процесс разработки.

Еще и как оказывает. Начинающие, так вообще впадают в недоумение, когда код содержащий a=b начинает работать по-разному работать в зависимости от того, число это или объект. Притом интерпретатор ни одной ошибки не выдал.

Питон хорош чтобы написать что-то быстро - какую-то автоматизацию, трансформацию, автотесты, когда bash'а уже не хватает. Или небольшие утилиты. Пару раз писал proof of concept, чтобы понять с чем придется столкнуться, чтобы написать нормальный дизайн и дальше передать его разработчикам, которые уже пишут на Java (ну, или сам на С++ переписывал, когда не по работе). В таких задачах можно не заморачиваться на валидации, на перформанс, ресурсы. А для серьезных вещей питон уже не подходит.

Kroz ★★★★★
()
Ответ на: комментарий от RazrFalcon

А bash нужно было уже давно выкинуть.

Почему вы так считаете?

divlns
() автор топика
Ответ на: комментарий от divlns

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

[, if, { - всё это отдельные команды.

Ну развер что (( )) они обрабатываются командной оболочкой.

infomeh ★★
()

Захотелось изучить программирование, просто ради интереса. Посоветовали bash, потому что несложный (так мне сказали).

Хм, а ведь bash довольно примитивен и простителен. Даже может и неплохой язык для старта с программированием. Ведь все необходимое есть: переменные, ветвления и циклы, ввод/вывод. Хотя есть есть и специфические моменты

function my-func() {
  echo "arg1: $1"
  echo "arg2: $2"
  echo "arg3: $3"
}

var="foo bar"

my-func $var
# не то же самое что
my-func "$var"

Чесно говоря, лучше б начать с чего-то типа Scratch. Потом может Python (если заинтересует).

KennyMinigun ★★★★★
()
Ответ на: комментарий от Kroz

А для задач, для которых предназначен Си, это важно.

О чём я и сказал

Для действительно очевидных вещей

В C++ есть и передача по ссылке, когда не надо явно брать указатель при передаче и разыменовывать внутри функции, если не ошибаюсь. Я иногда пишу «для души» на C и конкретно эта адресная акробатикаарифметика вкупе с приоритетами операций раздражает, когда возникает что-то вроде *((*a)[0]) или *(*a[0]). Ну и malloc'и кастовать.

например, когда из функции нужно вернуть значение в одном из параметре (а не как return)

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

проверки в начало каждой функции, что параметр 1 в функции сложения - это именно число, а не строка, не объект

Питон таки не даст сложить разнотипные объекты в большинстве случаев, даже байтовые строки с обычными и enum'ами. Неявно только числовые типы, как правило, приводятся к одному типу и объекты в функциях вывода к строке. Это, конечно, не меняет того, что выяснится это всё в рантайме, но хотя бы ошибка типов тихо не проглотится, т.е. достаточно дисциплинирует, чтобы не полагаться на неявное приведение типов, как в JS, и помнить о них. Аннотации типов тут скорее помогают найти место откуда может прийти что-то не то.

Ну и ещё есть Cython

WDWTFWW
()
Ответ на: комментарий от divlns

красивее и понятней

С третьей ветки, асинков и := уже нет. Красивый снаружи, уродливый внутри. Зачем мне ещё один язык, заваленный синтаксическим мусором (а его завалят мусором, надо только подождать), когда есть оригинальный perl, не тешащий меня иллюзиями?

Вообще, я не понимаю, каким образом ты полноценный ЯП считаешь проще шелла, который явно проще.

не особо разбираясь

Это у тебя js cultural assumption из подсознания заговорил.

Я вот почитал немножко за tcl. Он явно проще питона. Почему его не объявили удобочитаемым языком и не носятся с ним, как угорелые?

anonymous
()
Ответ на: комментарий от anonymous

Кстати любой другой (особенно интерпретируемый) язык способен заменить шелл

Я видел эти скрипты на fabric. Отвратительно выглядят и ещё отвратительнее их фиксить.

А всё из-за того, что некоторая категория «программистов» бегает от шелла, как от раскалённого утюга. man ssh, man scp? Не, мы лучше в пучарме на своём 4к-мониторе на всю ширину растечёмся автокомплитом по исходнику питона, приправив вкраплениями шелла через конструкцию.

При всём этом спеллы на шелле надо не составлять самому, не оборачивать в функцию, а подглядеть у соседа, украсив исходник копипастой. Была и другая крайность: имелся целый класс apt, как мне удалось понять из его инвоков, существенным был только метод install.

anonymous
()
Ответ на: комментарий от Kroz

Ты удивишься, когда узнаешь, что одну из первых разновидностей mail (вроде бы) написали на шелле целиком и полностью.

anonymous
()
Ответ на: комментарий от ism

Бегло посмотрел первый пункт, никакого упоминания xargs и попытки свернуть куда-то не туда. Повеселило.

anonymous
()
Ответ на: комментарий от ism

Грубо говоря, там мемы из the unix-haters handbook плюс ошибки вчерашних js-кодеров из мейлрушечки, помноженные на лукавые мудрствования. Просто я даже не знаю, кем надо быть, чтобы делать [grep pattern file].

anonymous
()
Ответ на: комментарий от anonymous

Лёня Поттер сотоварищи в своём systemd.

Лёня Поттер сотоварищи застряли в своём systemd. Им уже из этого дермища не выбраться. Пускай там и сидят.

zvezdochiot

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.