Comments 67
Воот во что можно погамать на плеере из плэйбоя!!!
А если серьезно + автору. Игра для примера — интересно, но кроме шуток, за счет скриптов можно очень здорово повысить эффективность работы. Пользователи *боксов подтвердят.
А если серьезно + автору. Игра для примера — интересно, но кроме шуток, за счет скриптов можно очень здорово повысить эффективность работы. Пользователи *боксов подтвердят.
+8
Именно, но часть моих знакомых отказывается иметь со скриптами дело по непонятным причинам.
*Вспомнил, как в 8 лет писал свою «Windows» на батнегах и ndos, когда из-за EGA-монитора не завелась Windows 3.11, и стер скупую мужскую слезу*
*Вспомнил, как в 8 лет писал свою «Windows» на батнегах и ndos, когда из-за EGA-монитора не завелась Windows 3.11, и стер скупую мужскую слезу*
+4
Я вот не отказываюсь, но откладываю на «в следующий раз уж точно» уже несколько лет. То есть возникает какая-то задача для которой идеологически верно было бы, наверное, использовать язык шелла, но вот глядя на код вроде вашего, да ещё с пояснениями о важности пробелов и т. п. создаётся впечатление, что решать задачу в шелле придётся неоправданно долго из-за необходимости на практике столкнуться с кучей нюансов типа тех же пробелов. Да и вообще код как-то выглядит перегруженным «пунктуацией», назначение которой неочевидно по опыту разработки на других языках.
+1
Везет же автору с количеством свободного времени и сил :)
+1
надо в блог «ненормальное программирование»
-2
bash? давайте на sh :D
0
Спасибо огромное. Баш учить полностью лень, а вот статей «баш для тех, кто уже умеет программировать» не хватает. Впринципе, это и есть причина, почему толком баш не знаю.
0
Извиняюсь за очевидный вопрос, но в чем принципиальная разница?
Мне кажется, в данном случае неважно же.
if [ "$B" -eq 3 ]
if [[ "$B" -eq 3 ]]
Мне кажется, в данном случае неважно же.
0
[ ] работает только с числами
разница будет, если, например, B=""
разница будет, если, например, B=""
0
Ой, про то, что только с числами, наврал.
0
Действительно наврали. А вот насчет пустой строки правда. Чтобы избежать сюрпризов при использовании [ приходится писать что-то в духе
if [ «x$B» -eq «xstringhere» ];…
if [ «x$B» -eq «xstringhere» ];…
+1
Если сравнивать строки, то нужен =, -eq для чисел.
+1
а я всю жизнь на пустоту сравнивал так:
if [ "$x" = "" ];
Это не правильно? не пойму, в чём тут подводный камень? вроде всего нормально работало.
if [ "$x" = "" ];
Это не правильно? не пойму, в чём тут подводный камень? вроде всего нормально работало.
0
В общем-то правильно. Но есть оговорки. Например, примечание 18 в ABS 7.3 по ссылке автора: rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html#FTN.AEN2722
Цитирую
Как указывает S.C., даже заключение строки в кавычки, при построении сложных условий проверки, может оказаться недостаточным. [ -n "$string" -o "$a" = "$b" ] в некоторых версиях Bash такая проверка может вызвать сообщение об ошибке, если строка $string пустая. Безопаснее, в смысле отказоустойчивости, было бы добавить какой-либо символ к, возможно пустой, строке: [ «x$string» != x -o «x$a» = «x$b» ] (символ «x» не учитывается).
/Цитирую
Если говорить о кросс-шелловом скриптинге, то становится еще интереснее.
Цитирую
Как указывает S.C., даже заключение строки в кавычки, при построении сложных условий проверки, может оказаться недостаточным. [ -n "$string" -o "$a" = "$b" ] в некоторых версиях Bash такая проверка может вызвать сообщение об ошибке, если строка $string пустая. Безопаснее, в смысле отказоустойчивости, было бы добавить какой-либо символ к, возможно пустой, строке: [ «x$string» != x -o «x$a» = «x$b» ] (символ «x» не учитывается).
/Цитирую
Если говорить о кросс-шелловом скриптинге, то становится еще интереснее.
0
[ — это команда, встроенная в bash, а [[ — это еще одно название test, при этом [[ — более универсальный вариант, не так ли? Соответственно, следует использовать [ там, где обязательна оптимизация по скорости и зависимостям. Я использовал [[ лишь для того, чтобы не путаться. А вообще, действительно не имеет значения.
+2
Вообще-то нет. [[ это не обертка к test, это как раз башизм, причем гораздо менее портабельный. У него есть несколько преимуществ перед [ (который как раз test, в баше немного расширенный). Подробности, например, здесь: stackoverflow.com/questions/669452/is-preferable-over-in-bash-scripts
+4
UFO just landed and posted this here
Спасибо. Давно думаю о том, чтобы bash поучить, да все руки не доходили да примеров достойных не было.
0
UFO just landed and posted this here
Не хватает какого-то «Game Over»-a) А так неплохо, да)
0
А какие средства отладки есть?
+1
echo?
+1
Из wiki:
Отладчик позволяет выполнять пошаговую трассировку, отслеживать, устанавливать или изменять значения переменных в процессе выполнения кода, устанавливать и удалять контрольные точки или условия останова и т.д.
Вот такого хочется… А echo — это типа логи… Без отладчика очень сложно сделать что то большое и сложное. Особенно, тут же нет даже компилятора…
Отладчик позволяет выполнять пошаговую трассировку, отслеживать, устанавливать или изменять значения переменных в процессе выполнения кода, устанавливать и удалять контрольные точки или условия останова и т.д.
Вот такого хочется… А echo — это типа логи… Без отладчика очень сложно сделать что то большое и сложное. Особенно, тут же нет даже компилятора…
0
Ну не знаю. Нам наш препод по Си говорит, и я с ним согласен, с учетом большого опыта программирования и отладки PHP: Юзайте printf (echo), им можно отладить всё. Отладчики везде разные, больше времени потратите на знакомство с его функциями, а юзая printf можно отлаживать что угодно и где угодно.
+4
Отладчик не нужен, согласен с Anexroid
+2
0
если в скрипте прописать «set -x», то при его запуске в stderr будут выводиться команды именно в том виде, в котором они выполняются. Таким образом, можно отслеживать какая из веток в операторе «if / then / else / fi» выполняется и какие значения переменных используются в выражениях.
вместо команды «set -x» можно просто вначале скрипта первой строкой поставить "!/bin/bash -x".
вместо команды «set -x» можно просто вначале скрипта первой строкой поставить "!/bin/bash -x".
+2
> r=$(( $x + $y )) #и снова обратите внимание на скобки и пробелы
Внутри (( )) знак доллара вообще можно опустить и написать просто:
Внутри (( )) знак доллара вообще можно опустить и написать просто:
r=$((x+y))
+1
в bash/sh конструкции if, for и т.д. — это команды, а не конструкции языка, потому после них обязательно нужен пробел. мне кажется, об этом необходимо упомянуть, чтобы понимать зачем так. вообще sh/bash чуть более, чем полностью состоит из команд.
0
только часть команд встроенные, а часть внешние как test и [ которые могут использоваться как и встроенные, так и отдельные программы /usr/bin/[
0
B
— очень хорошее название для переменной для хранения символа с клавиатуры, да+1
Спасибо!
А как будет выглядеть Pac-Man?
п.с. «заодно»
А как будет выглядеть Pac-Man?
0
Я имеет смысл для чего-то сложнее 5 строк использовать bash?
Более менее длинные скрипты пишу на ruby или python. Получается покрасивше и отлаживать проще. Проблем с наличием интерпретаторов в системе не испытывал.
Более менее длинные скрипты пишу на ruby или python. Получается покрасивше и отлаживать проще. Проблем с наличием интерпретаторов в системе не испытывал.
+1
Вы просто не пробовали писать для embedded-линуксов. Там python и ruby часто некуда впихнуть, а sh какой-никакой (чаще никакойbusybox) имеется.
0
Это конечно да, но имхо сильно частный случай
0
Разумеется, мощные скриптовые языки очень удобные. Разумеется, embedded — это частный случай. Но каждый опирается на свои возможности, так ведь?
Например: у меня есть несколько зверьков с embedded — пару роутеров, Palm и WinMo-девайс (правда, на нем linux живет в экспериментальных целях), и ни на одном нет python или ruby.
Кроме того, я активно использую KolibriOS, и полноценного порта python для нее пока что нет (впрочем, sh тоже нет). Почему не портирую сам? Python я не знаю, для меня must-have это lua, которую я уже портировал.
Например: у меня есть несколько зверьков с embedded — пару роутеров, Palm и WinMo-девайс (правда, на нем linux живет в экспериментальных целях), и ни на одном нет python или ruby.
Кроме того, я активно использую KolibriOS, и полноценного порта python для нее пока что нет (впрочем, sh тоже нет). Почему не портирую сам? Python я не знаю, для меня must-have это lua, которую я уже портировал.
0
case-esac это жесть конечно.
0
Sign up to leave a comment.
Articles
Change theme settings
Учим bash-скрипты, пишем Sokoban