🐧 Linux  ·  20 вопросов  ·  ~45 мин  ·  ⏱ Таймер 45:00  ·  Средний  · 

Bash: циклы и функции

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. На 20 вопросов отведено 45 минут. Не меньше половины заданий требуют разобрать команды, сценарий Bash, конфигурацию или диагностический вывод. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и краткий разбор каждого решения.
Вопрос 1 из 20
Что может произойти в пустом каталоге с циклом for f in *.log без nullglob?
BashТерминал
for f in *.log; do
  gzip -- "$f"
done
Вопрос 2 из 20
Как сделать, чтобы непопавший glob исчезал и цикл не выполнялся?
BashТерминал
shopt -s nullglob
files=(*.log)
for f in "${files[@]}"; do printf '%s\n' "$f"; done
Вопрос 3 из 20
Почему while IFS= read -r line считается безопасной основой для чтения обычных строк?
Вопрос 4 из 20
Как обработать произвольные имена из find, включая перевод строки?
BashТерминал
while IFS= read -r -d '' f; do
  sha256sum -- "$f"
done < <(find data -type f -print0)
Вопрос 5 из 20
Что выведет арифметический цикл for ((i=0; i<3; i++))?
BashТерминал
for ((i=0; i<3; i++)); do printf '%d\n' "$i"; done
Вопрос 6 из 20
Функция печатает путь и возвращает 2. Как получить именно статус, а не напечатанные данные?
BashТерминал
locate_file() { printf '%s\n' /tmp/item; return 2; }
path=$(locate_file); rc=$?
printf 'path=%s rc=%d\n' "$path" "$rc"
Вопрос 7 из 20
Зачем объявлять рабочую переменную local внутри функции?
Вопрос 8 из 20
Какие позиционные параметры видит функция Bash?
BashТерминал
show() { printf 'func=%s argc=%d first=%s\n' "${FUNCNAME[0]}" "$#" "${1-}"; }
set -- outer
show inner extra
printf 'script first=%s\n' "$1"
Вопрос 9 из 20
Как не выполнять main при source файла с функциями?
BashТерминал
main() { run_job "$@"; }
if [[ ${BASH_SOURCE[0]} == "$0" ]]; then
  main "$@"
fi
Вопрос 10 из 20
Что полезно делать в trap EXIT для временного каталога?
BashТерминал
tmp=$(mktemp -d) || exit 1
cleanup() { [[ -n ${tmp-} && -d $tmp ]] && rm -rf -- "$tmp"; }
trap cleanup EXIT
Вопрос 11 из 20
Почему set -e не заменяет явную обработку ошибок?
BashТерминал
set -e
if grep -q pattern file; then echo found; fi
echo continues
Вопрос 12 из 20
Что добавляет set -o pipefail в служебном сценарии?
Вопрос 13 из 20
grep вернул 1, потому что совпадений нет, и это допустимо. Как не спутать это с ошибкой чтения?
BashТерминал
grep -q pattern file; rc=$?
case $rc in
  0) found=1 ;;
  1) found=0 ;;
  *) exit "$rc" ;;
esac
Вопрос 14 из 20
Обработчик EXIT выполняет cleanup, которая может ошибиться. Как сохранить исходный код сценария?
BashТерминал
cleanup() {
  rc=$?
  rm -f -- "${tmp-}" || :
  exit "$rc"
}
trap cleanup EXIT
Вопрос 15 из 20
Что обычно делает set -u в неинтерактивном Bash-сценарии при обращении к неустановленной переменной?
Вопрос 16 из 20
Что означает идемпотентность служебного сценария?
BashТерминал
install -d -m 0750 -o app -g app /srv/app/cache
ln -sfn releases/v8 /srv/app/current
Вопрос 17 из 20
Зачем использовать flock вокруг задания cron?
Вопрос 18 из 20
Как заменить готовый файл так, чтобы читатели не увидели половину содержимого?
BashТерминал
tmp=$(mktemp ./config.XXXXXX) || exit 1
generate >"$tmp" && validate "$tmp" && mv -f -- "$tmp" ./config
Вопрос 19 из 20
Что должен делать режим --dry-run у опасного сценария?
Вопрос 20 из 20
Какой журнал лучше помогает расследовать повторный запуск?
BashТерминал
printf '%s run=%s action=%s path=%q rc=%d\n' \
  "$(date --iso-8601=seconds)" "$run_id" move "$path" "$rc" >>job.log

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу