Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Это увлекательная головоломка с большим количеством уникальных уровней.

Блок пазл. Новый уровень

Казуальные, Головоломки, Логическая

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Командная оболочка bash

С этим тегом используют

Linux IT Программирование Все
81 пост сначала свежее
62
anetto1502
anetto1502
10 месяцев назад
GNU/Linux

Идеальный скрипт на bash 2 | Bash ideal script 2⁠⁠

Сегодня продолжим изучать наш идеальный скрипт из предыдущего видео (видео прошлой части). Разберёмся с непонятными конструкциями в bash [] и [[]] и обсудим, когда можно не ставить кавычки вокруг переменных. Ниже видео с разбором, а кому удобнее текстовый вариант — добро пожаловать ниже.

Давайте разбираться. Двойные квадратные скобки в современном bash - это ключевое слово, такое же, как for. Проверить это можно с помощью команды type. Одинарные квадратные скобки - это встроенная команда, такая же, как test. Что из этого следует? Да фиг знает, по факту. Просто интересно. А вот внутри одинарных и двойных квадратных скобок можно использовать разные конструкции.

Для сравнения [[ и [ нашёл для вас очень наглядную таблицу

Идеальный скрипт на bash 2 | Bash ideal script 2 Telegram, Программирование, Разработка, IT, Обучение, Командная оболочка bash, YouTube, Видео, Длиннопост

Источник: https://mywiki.wooledge.org/BashFAQ/031

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

Но про переносимость куда мы говорим? Действительно, двойные квадратные скобки появились не сразу. В разделе 7.1 книги Advanced Bash-Scripting Guide (версия на русском) написано, что конструкция появилась в bash версии 2.02. Кстати, это очень большая и вкусная книжка по bash, рекомендую её, если вы зачем-то решили стать в баше экспертом. Там под тысячу страниц, материал не для слабых духом. Есть и на русском, и на английском.

Так когда появились двойные скобки? Проверим changelog баша, там можно найти первое упоминание конструкции [[]] в версии 2.02. А потом можно найти релиз, и это 1998 год. 1998, Карл. Надеюсь, все обновились с тех пор.

В man bash можно найти описание [[]], лучше посмотрите в видео этот фрагмент.

Соберём на коленке пример демонстрации важности двойных кавычек.

a="hello world"

if [[ $a == "hello world" ]]

then

echo "success"

fi

# в видео показан однострочник ниже

if [[ $a == "hello world" ]]; then echo "success"; fi

И всё хорошо, внутри [[]] действительно можно не применять кавычки, bash всё сделает корректно. Но потом модифицируем пример

# так неправильно!

if [[ $a == "hello world" ]]; then echo "success"; touch $a; fi

И вот этот код уже ломается. Вместо создания одного файла "hello world" создаются два отдельных файла. Потому что в touch надо кавычками защищать переменную

# так нормально, но тяжело объяснить, где нужны кавычки

if [[ $a == "hello world" ]]; then echo "success"; touch "$a"; fi

А теперь объясните джуну, где надо ставить кавычки, а где не надо. Самое простое правило - кавычки должны быть везде. Великий и ужасный Гудвин, ой, то есть баш, очень неустойчив к разного рода ошибкам. По опыту жить проще с ядрёным стайл-гайдом, по которому чисто визуально можно выявить ошибку. Есть переменная? Должны быть кавычки.

# так безопаснее всего

if [[ "$a" == "hello world" ]]; then echo "success"; touch "$a"; fi

Давайте попробуем сконструировать выражение для оценки времени выполнения. Как корретно измерять время выполнения я планирую снять отдельное видео. Пока не будем вдаваться в детали и попробуем собрать нужную конструкцию

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

time echo $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i )

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

Вернёмся к замене -lt на треугольный знак меньше. Попробуем

# ОШИБОЧНОЕ 2 итерации вместо 1кк

time echo $( i=0; while [[ $i < 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i )

Вау! Отработало мгновенно. Но неправильно. Обратите внимание на вывод - прошло только 2 итерации. Потому что два больше миллиона, если смотреть на них как на строки. Строковое сравнение идёт посимвольно, и два больше 1 - истина, дальше смотреть не требуется.

По факту, нужно использовать арифметическое выполнение

time echo $( i=0; while (( $i < 1000000 )); do i=$(( $i+1 )) ; done; echo $i )

А теперь ещё раз. Как вы думаете, в большом скрипте легко обнаружить такую ошибку? Это отладочный ад. Поэтому используйте -lt и аналогичные конструкции в баше, чтобы сэкономить себе время

Подытожим: всегда используйте двойные квадратные скобки в if и while, всегда защищайте ваши переменные двойными кавычками, даже если в отдельных конструкциях баш делает это за вас. Пишите поддерживаемый код, и да пребудет с вами баш.

Заходите в наш канал DevFm в телеграмм, где выходят годные материалы для middle плюс python разработчика. Если хотите разобраться с азами Linux, то добро пожаловать в наш бесплатный курс cli-for-dev на степике. Буду рад, если вы поддержите нас позитивными оценками и обратной связью по курсу.

Показать полностью 1
[моё] Telegram Программирование Разработка IT Обучение Командная оболочка bash YouTube Видео Длиннопост
30
3
Stravnik
Stravnik
1 год назад

Step 2: Основы Linux и работа с Bash⁠⁠

Ниже идет реклама и ссылки.

В данном видео я рассказываю о подходе "Инфраструктура как код".

Полезные ссылки:
YouTube канал: https://www.youtube.com/@MainDevOps
Telegram канал: https://t.me/devops_spb_ru
Telegram чат: https://t.me/devops_im

Показать полностью
[моё] Гайд IT DevOps Курс Обучение Linux Командная оболочка bash Видео YouTube
0
smps
1 год назад

Линуксоид на удалёнку⁠⁠

Года с 98-99 Unix/Linux, позже Центос и Роки, цисками плотно занимался лет 8-9- назад. Без проблем разберу бэктрейсы почти на любом популярном языке. По логам легко найду где проблема. За последние годы по Микротам натаскался. Заббис, графана, Постгрес, мускуль, MSSQL. в PL/SQL тоже выше среднего. Хорошо умею в маршрутизацию и фаерволы, kali, metasploit, пентест вроде неплохо получается. И естественно планктону рабочие станции до ума довести.
PS: Ещё много чего. Если интересно - спишемся.
PPS:Английский - свободно. Дома Забикс с Постгресом и графана для красивостей.

Linux Kali Mikrotik Openwrt Командная оболочка bash Ubiquiti Unifi Текст 0day
18
2
VladimirChursin
VladimirChursin
1 год назад
Лига Сисадминов
Серия ИТ

Firewalld. Занимательный факт⁠⁠

Салом! (привет на таджикском)

Занимательный (и чуточку возмутительный) факт обнаружил при скриптовании правил фаервола (который firewalld) в ОС вида "RHEL8" (AlmaLinux8, Rocky Linux 8, etc).

По какой-то неведомой причине добавление элементов ipset-а в сам ipset через файл работает "через раз" (в общем, как повезёт), если использовать "--add-entries-from-file" в рамках bash-скрипта.

Провёл не менее десятка попыток запуска скрипта. Корректно ряд подобных команд (для 4-х ipset-ов) отработал только единожды, хотя ввод вручную отрабатывает стабильно (не проверял более трёх раз).

При этом, если в рамках скрипта использовать в цикле команду на добавление единичного элемента в конкретный ipset ("--add-entry"), то проблем не возникает.

В общем, в скриптах лучше задействовать добавление элементов в ipset при помощи "--add-entry".

Firewalld. Занимательный факт Linux, Информационная безопасность, IT, Red Hat, Firewall, Командная оболочка bash
[моё] Linux Информационная безопасность IT Red Hat Firewall Командная оболочка bash
17
357
nekko
nekko
1 год назад
ДЕВОПСИНА

Лучший Linux дистрибутив для просмотра XXX контента⁠⁠

Лучший Linux дистрибутив для просмотра XXX контента IT, IT юмор, Юмор, Linux, Командная оболочка bash, Shell, DevOps, Скриншот

ИСТОЧНИК: https://t.me/bashdays/183

[моё] IT IT юмор Юмор Linux Командная оболочка bash Shell DevOps Скриншот
41
DELETED
1 год назад

DBA. Какие технические навыки развивать?⁠⁠

Ребят, по-любому же есть на Пикабу админы БД.
После sql куда лучше направить усилия? В линукс? Баш? Питон? Чего в первую очередь учить?
Буду благодарен адекватным советам)

[моё] База данных SQL Linux и Windows Postgresql Mysql Командная оболочка bash Языки программирования Текст
9
FreudNotSleep
FreudNotSleep
1 год назад

Не баян а классика⁠⁠

Не баян а классика Командная оболочка bash, Ностальгия
Не баян а классика Командная оболочка bash, Ностальгия
Не баян а классика Командная оболочка bash, Ностальгия

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

Показать полностью 1
Командная оболочка bash Ностальгия
1
21
FoxTrot75
FoxTrot75
1 год назад

Очередная чистилка кэша для Steam Deck⁠⁠

Сделал для себя скрипт для очистки кеша стима на деки на чистом bash (считаю ставить только ради этого Decky слишком оверхед)
Так что делюсь, если кому-то понравится и поможет буду рад
Если будут замечания или предложения, тоже буду рад (желательно писать прямо на гитхабе)

https://github.com/foxtrot75/SteamDeck

Очередная чистилка кэша для Steam Deck Steam Deck, Командная оболочка bash
[моё] Steam Deck Командная оболочка bash
12
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии