Тест: Bash и Shell mastery
Вы умеете разговаривать с компьютерами? Ну, вроде бы?
Проверьте свои навыки Bash‑скриптинга с этими 16 вопросами!
Охватывая переменные, циклы, условные конструкции, работу со строками, функции и от простых до хитрых подводных камней синтаксиса.
Отточите (или докажите) свои навыки shell‑скриптинга навыки!
Как объявляются переменные в Bash?
В Bash переменные объявляются без пробелов вокруг знака =. Например:
name=AliceЭто присваивает значение "Alice" переменной name.
Примечание: $name используется для ссылки или чтения значения переменной.
Добавление пробелов заставляет оболочку интерпретировать команду как программу для запуска, что не то, что вам нужно при установке переменной.
Кроме того, Bash чувствителен к регистру, поэтому name, NAME и Name — разные переменные.
Наконец, в именах переменных нельзя использовать пробелы или дефисы (-). Используйте подчёркивания (_) или camelCase вместо этого.
Что выведет It's 🔨 Time!?
Знаю. Сумасшедше, как быстро экранирование делает строки трудными для разбора. Представьте, как экранировать другие языки в Bash‑строках — со всеми этими кавычками, апострофами и символами $, которые могут вас сломать. 🫠
Внутри одинарных кавычек апостроф нельзя экранировать обратным слешем. Нужно закрыть кавычки, экранировать апостроф снаружи и снова открыть кавычки ('\''). Получится:
It's 🔨 Time!Есть и другие способы решить эту задачу, но это самый распространённый.
Итак, что будет выведено?
price="$100"echo "Cost: $price"Нумерованные переменные имеют особое значение. В данном случае $1 — это специальная переменная, содержащая первый аргумент, переданный скрипту или функции.
Поскольку мы запускаем скрипт в REPL, аргументов нет, поэтому $1 пустая. Оставшийся текст 00 выводится как есть.
Чтобы вывести буквальный символ $, используйте одинарные кавычки или экранируйте его обратным слешем (\\):
price="\$100"echo "Cost: $price"Как получить длину переменной в Bash?
Синтаксис ${#username} возвращает длину username.
Например:
username="@justsml"echo ${#username} # => 8Хотя wc сработает, технически это не часть Bash.
Утилита wc — старый внутренний шутливый термин, означающий “water closet”, то есть туалет.
ШУТКА! Кто‑нибудь это читает?
На самом деле wc — древняя команда из POSIX (и эпохи AT&T Unix). Она сокращённо означает “word count” и может подсчитывать строки, слова и символы в файле или потоке ввода.
Что выведет этот скрипт?
function greet () { echo "$1"}greet Hi DanФункции в Bash могут принимать аргументы. Переменная $1 содержит первый аргумент, переданный функции.
Помните, $0 — имя скрипта, $1 — первый аргумент, $2 — второй и так далее. Пробелы разделяют аргументы. Поэтому greet Hi Dan передаёт "Hi" как первый аргумент. Чтобы передать "Hi Dan" как один аргумент, нужно заключить его в кавычки: greet "Hi Dan".
Как работает математика в Bash?
Синтаксис (( )) выполняет целочисленную арифметику в Bash.
Его можно использовать для простых вычислений:
((result = 2 + 2))echo $result # => 4Или для условных выражений:
if (( 2 > 1 )); then echo "2 is greater than 1"fiДля арифметики с плавающей точкой рассмотрите использование bc или awk.
Какой из вариантов правильно умножает 10 и 0.5, выводя 5?
Что делает : в этом скрипте?
rosie="Bad cat, good cat"echo ${rosie:9}Синтаксис ${var:offset} извлекает подстроку, начиная с offset. Здесь вывод:
good catЧтобы извлечь подстроку заданной длины, используйте ${var:offset:length}.
Чтобы извлечь из конца строки, используйте ${var: -offset}. (Обратите внимание на пробел перед -!)
Подробнее о подстроках в BashFAQ. Спасибо OneTurnMore за разбор.
Оставил ли мой Bash‑квиз вас в полном разруше‑нном состоянии?
Дайте знать в комментариях ниже!
Дополнительные материалы
Подтяните свои навыки Bash с помощью следующих ресурсов:
- Bash Guide
- BashFAQ
- ShellCheck
- Bash Academy
- Bash Scripting Tutorial
- Bash Reference Manual
- Bash Hackers Wiki
- Bash Guide for Beginners
- Bash Reference Card
