[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/create-bash-script-linux":3,"mdc--uvlp1o-key":449,"mdc--fxh17f-key":483,"mdc--utz2aw-key":506,"mdc--3a0749-key":530,"mdc--ia2eg2-key":554,"mdc-ei5is2-key":574,"mdc--5oiib2-key":594,"mdc--nawqke-key":608,"mdc--g4rttg-key":628,"mdc-3esgk3-key":656,"related-/guides/linux/run-bash-script,/guides/linux/debug-bash-script,/guides/linux/use-bash-variables":676},{"id":4,"title":5,"appliesTo":6,"author":10,"body":11,"canonical":381,"code":381,"createdAt":382,"description":383,"difficulty":384,"draft":385,"estimatedTime":386,"extension":387,"faq":388,"howToSteps":401,"howToTotalTime":420,"image":381,"keywords":421,"locale":430,"meta":431,"navigation":150,"path":432,"platform":433,"related":434,"section":438,"seo":439,"severity":381,"stem":440,"summary":441,"tags":442,"twitterCreator":381,"twitterSite":381,"type":447,"updatedAt":382,"__hash__":448},"content_ru/guides/linux/create-bash-script-linux.md","Создание Bash-скрипта в Linux: пошаговое руководство для начинающих",[7,8,9],"Ubuntu 22.04","Debian 12","Fedora 38","FixPedia Team",{"type":12,"value":13,"toc":367},"minimark",[14,19,23,27,83,87,92,103,107,117,121,127,163,167,177,181,191,277,280,284,295,299,310,314,363],[15,16,18],"h2",{"id":17},"введение-зачем-это-нужно","Введение / Зачем это нужно",[20,21,22],"p",{},"Bash-скрипты позволяют автоматизировать повторяющиеся задачи в Linux, ускорять работу и снижать вероятность ошибок. В этом гайде вы шаг за шагом научитесь создавать простой Bash-скрипт, делать его исполняемым и запускать. После завершения вы сможете писать базовые скрипты для автоматизации повседневных операций.",[15,24,26],{"id":25},"требования-подготовка","Требования / Подготовка",[28,29,30,38,44,66,77],"ul",{},[31,32,33,37],"li",{},[34,35,36],"strong",{},"Операционная система:"," Linux (проверено на Ubuntu 22.04, Debian 12, Fedora 38).",[31,39,40,43],{},[34,41,42],{},"Доступ к терминалу"," с правами обычного пользователя (или root, если скрипт требует повышенных привилегий).",[31,45,46,49,50,54,55,54,58,61,62,65],{},[34,47,48],{},"Базовые знания команд Linux"," (",[51,52,53],"code",{},"ls",", ",[51,56,57],{},"cd",[51,59,60],{},"nano","/",[51,63,64],{},"vim",").",[31,67,68,71,72,54,74,76],{},[34,69,70],{},"Текстовый редактор"," для создания файлов (рекомендуется ",[51,73,60],{},[51,75,64],{}," или графический редактор, например VS Code).",[31,78,79,82],{},[34,80,81],{},"Интерпретатор Bash"," версии 5.0 или выше (обычно предустановлен).",[15,84,86],{"id":85},"пошаговая-инструкция","Пошаговая инструкция",[88,89,91],"h3",{"id":90},"шаг-1-создайте-файл-скрипта","Шаг 1: Создайте файл скрипта",[20,93,94,95,98,99,102],{},"Используйте текстовый редактор, чтобы создать новый файл, например ",[51,96,97],{},"myscript.sh",". В терминале это можно сделать командой ",[51,100,101],{},"nano myscript.sh",".",[88,104,106],{"id":105},"шаг-2-добавьте-shebang-и-сделайте-скрипт-исполняемым","Шаг 2: Добавьте shebang и сделайте скрипт исполняемым",[20,108,109,110,113,114,102],{},"Откройте файл и в самом начале добавьте строку ",[51,111,112],{},"#!/bin/bash",". Затем выведите файл из редактора и выполните команду ",[51,115,116],{},"chmod +x myscript.sh",[88,118,120],{"id":119},"шаг-3-напишите-основной-код","Шаг 3: Напишите основной код",[20,122,123,124,102],{},"Добавьте нужные команды. Например, для вывода сообщения используйте ",[51,125,126],{},"echo \"Привет, мир!\"",[128,129,134],"pre",{"className":130,"code":131,"language":132,"meta":133,"style":133},"language-bash shiki shiki-themes github-light github-dark","#!/bin/bash\n\necho \"Привет, мир!\"\n","bash","",[51,135,136,145,152],{"__ignoreMap":133},[137,138,141],"span",{"class":139,"line":140},"line",1,[137,142,144],{"class":143},"sJ8bj","#!/bin/bash\n",[137,146,148],{"class":139,"line":147},2,[137,149,151],{"emptyLinePlaceholder":150},true,"\n",[137,153,155,159],{"class":139,"line":154},3,[137,156,158],{"class":157},"sj4cs","echo",[137,160,162],{"class":161},"sZZnC"," \"Привет, мир!\"\n",[88,164,166],{"id":165},"шаг-4-запустите-скрипт","Шаг 4: Запустите скрипт",[20,168,169,170,173,174,102],{},"Перейдите в каталог со скриптом (",[51,171,172],{},"cd /path/to/script",") и выполните ",[51,175,176],{},"./myscript.sh",[88,178,180],{"id":179},"шаг-5-добавьте-обработку-аргументов-необязательно","Шаг 5: Добавьте обработку аргументов (необязательно)",[20,182,183,184,54,187,190],{},"Если скрипт должен принимать параметры, используйте ",[51,185,186],{},"$1",[51,188,189],{},"$2"," и т.д. Пример:",[128,192,194],{"className":130,"code":193,"language":132,"meta":133,"style":133},"#!/bin/bash\n\nif [ $# -eq 0 ]; then\n  echo \"Использование: $0 \u003Cимя>\"\n  exit 1\nfi\n\necho \"Привет, $1!\"\n",[51,195,196,200,204,229,244,253,259,264],{"__ignoreMap":133},[137,197,198],{"class":139,"line":140},[137,199,144],{"class":143},[137,201,202],{"class":139,"line":147},[137,203,151],{"emptyLinePlaceholder":150},[137,205,206,210,214,217,220,223,226],{"class":139,"line":154},[137,207,209],{"class":208},"szBVR","if",[137,211,213],{"class":212},"sVt8B"," [ ",[137,215,216],{"class":157},"$#",[137,218,219],{"class":208}," -eq",[137,221,222],{"class":157}," 0",[137,224,225],{"class":212}," ]; ",[137,227,228],{"class":208},"then\n",[137,230,232,235,238,241],{"class":139,"line":231},4,[137,233,234],{"class":157},"  echo",[137,236,237],{"class":161}," \"Использование: ",[137,239,240],{"class":157},"$0",[137,242,243],{"class":161}," \u003Cимя>\"\n",[137,245,247,250],{"class":139,"line":246},5,[137,248,249],{"class":157},"  exit",[137,251,252],{"class":157}," 1\n",[137,254,256],{"class":139,"line":255},6,[137,257,258],{"class":208},"fi\n",[137,260,262],{"class":139,"line":261},7,[137,263,151],{"emptyLinePlaceholder":150},[137,265,267,269,272,274],{"class":139,"line":266},8,[137,268,158],{"class":157},[137,270,271],{"class":161}," \"Привет, ",[137,273,186],{"class":157},[137,275,276],{"class":161},"!\"\n",[278,279],"in-article-ad",{},[88,281,283],{"id":282},"шаг-6-проверьте-и-отладьте-скрипт","Шаг 6: Проверьте и отладьте скрипт",[20,285,286,287,290,291,294],{},"Используйте ",[51,288,289],{},"bash -n myscript.sh"," для синтаксической проверки и ",[51,292,293],{},"bash -x myscript.sh"," для трассировки выполнения.",[15,296,298],{"id":297},"проверка-результата","Проверка результата",[20,300,301,302,305,306,309],{},"После запуска скрипта убедитесь, что вывод соответствует ожиданиям. Проверьте, что исполнимый бит установлен (",[51,303,304],{},"-rwxr-xr-x","), и что shebang указывает на ",[51,307,308],{},"/bin/bash",". Выполните скрипт несколько раз, чтобы убедиться в стабильности работы.",[15,311,313],{"id":312},"возможные-проблемы","Возможные проблемы",[28,315,316,329,345,354],{},[31,317,318,321,322,325,326,65],{},[34,319,320],{},"Скрипт не исполняется:"," Убедитесь, что выполнена команда ",[51,323,324],{},"chmod +x",". Также проверьте права доступа (",[51,327,328],{},"ls -l myscript.sh",[31,330,331,334,335,337,338,341,342,102],{},[34,332,333],{},"Shebang не работает:"," Проверьте, что ",[51,336,308],{}," существует (",[51,339,340],{},"which bash","). В некоторых минимальных дистрибутивах используйте ",[51,343,344],{},"/usr/bin/env bash",[31,346,347,350,351,65],{},[34,348,349],{},"Отсутствие переменных окружения:"," Если скрипт использует переменные, экспортируйте их перед запуском (",[51,352,353],{},"export VAR=value",[31,355,356,359,360,362],{},[34,357,358],{},"Ошибки синтаксиса:"," Используйте ",[51,361,289],{}," для быстрой проверки перед запуском.",[364,365,366],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":133,"searchDepth":147,"depth":147,"links":368},[369,370,371,379,380],{"id":17,"depth":147,"text":18},{"id":25,"depth":147,"text":26},{"id":85,"depth":147,"text":86,"children":372},[373,374,375,376,377,378],{"id":90,"depth":154,"text":91},{"id":105,"depth":154,"text":106},{"id":119,"depth":154,"text":120},{"id":165,"depth":154,"text":166},{"id":179,"depth":154,"text":180},{"id":282,"depth":154,"text":283},{"id":297,"depth":147,"text":298},{"id":312,"depth":147,"text":313},null,"2026-07-02 14:28:49","Узнайте, как быстро создать Bash-скрипт в Linux. Пошаговая инструкция с примерами кода для автоматизации задач за 5 минут.","easy",false,"5-10 мин","md",[389,392,395,398],{"question":390,"answer":391},"Как создать новый Bash-скрипт?","Откройте терминал, создайте файл с помощью текстового редактора (например, `nano script.sh`), добавьте shebang `#!/bin/bash` и сделайте файл исполняемым (`chmod +x script.sh`).",{"question":393,"answer":394},"Почему скрипт не исполняется после сохранения?","Вероятно, не установлены права на выполнение. Выполните `chmod +x script.sh` и проверьте флаг исполняемости (`ls -l script.sh`).",{"question":396,"answer":397},"Как запустить созданный скрипт?","Перейдите в каталог скрипта и выполните `./script.sh` или вызовите его по полному пути (`/path/to/script.sh`).",{"question":399,"answer":400},"Что делать, если скрипт выдает ошибку?","Используйте `bash -n script.sh` для синтаксической проверки, `bash -x script.sh` для трассировки выполнения, либо проверьте сообщения об ошибках в stderr.",[402,405,408,411,414,417],{"name":403,"text":404},"Создайте файл скрипта","Используйте текстовый редактор, чтобы создать новый файл, например `myscript.sh`. В терминале это можно сделать командой `nano myscript.sh`.",{"name":406,"text":407},"Добавьте shebang и сделайте скрипт исполняемым","Откройте файл и в самом начале добавьте строку `#!/bin/bash`. Затем выведите файл из редактора и выполните команду `chmod +x myscript.sh`.",{"name":409,"text":410},"Напишите основной код","Добавьте нужные команды. Например, для вывода сообщения используйте `echo \"Привет, мир!\"`.",{"name":412,"text":413},"Запустите скрипт","Перейдите в каталог со скриптом (`cd /path/to/script`) и выполните `./myscript.sh`.",{"name":415,"text":416},"Добавьте обработку аргументов (необязательно)","Если скрипт должен принимать параметры, используйте `$1`, `$2` и т.д. Пример: `echo \"Привет, $1!\"`.",{"name":418,"text":419},"Проверьте и отладьте скрипт","Используйте `bash -n myscript.sh` для синтаксической проверки и `bash -x myscript.sh` для трассировки выполнения.","PT15M",[422,423,424,425,426,427,428,429],"создать Bash-скрипт Linux","как написать Bash скрипт","Bash-скрипт пример кода","сделать Bash-скрипт исполняемым","запустить Bash-скрипт в терминале","редактировать Bash-скрипт","Bash-скрипт для автоматизации","пошаговое руководство по созданию Bash-скрипта","ru_RU",{},"/guides/linux/create-bash-script-linux","linux",[435,436,437],"/guides/linux/run-bash-script","/guides/linux/debug-bash-script","/guides/linux/use-bash-variables","Гайды Linux",{"title":5,"description":383},"guides/linux/create-bash-script-linux","В этом гайде вы научитесь создавать, редактировать и запускать Bash-скрипты в Linux. После завершения вы сможете автоматизировать простые задачи с помощью скриптов.",[443,444,445,446],"Bash","Linux","скрипты","автоматизация","guide","w9hIIV3xYB1miE5ojeDmtPgmNumGRxFpELHePF3KX_4",{"data":450,"body":451},{},{"type":452,"children":453},"root",[454],{"type":455,"tag":20,"props":456,"children":457},"element",{},[458,461,467,469,474,476,482],{"type":459,"value":460},"text","Откройте терминал, создайте файл с помощью текстового редактора (например, ",{"type":455,"tag":51,"props":462,"children":464},{"className":463},[],[465],{"type":459,"value":466},"nano script.sh",{"type":459,"value":468},"), добавьте shebang ",{"type":455,"tag":51,"props":470,"children":472},{"className":471},[],[473],{"type":459,"value":112},{"type":459,"value":475}," и сделайте файл исполняемым (",{"type":455,"tag":51,"props":477,"children":479},{"className":478},[],[480],{"type":459,"value":481},"chmod +x script.sh",{"type":459,"value":65},{"data":484,"body":485},{},{"type":452,"children":486},[487],{"type":455,"tag":20,"props":488,"children":489},{},[490,492,497,499,505],{"type":459,"value":491},"Вероятно, не установлены права на выполнение. Выполните ",{"type":455,"tag":51,"props":493,"children":495},{"className":494},[],[496],{"type":459,"value":481},{"type":459,"value":498}," и проверьте флаг исполняемости (",{"type":455,"tag":51,"props":500,"children":502},{"className":501},[],[503],{"type":459,"value":504},"ls -l script.sh",{"type":459,"value":65},{"data":507,"body":508},{},{"type":452,"children":509},[510],{"type":455,"tag":20,"props":511,"children":512},{},[513,515,521,523,529],{"type":459,"value":514},"Перейдите в каталог скрипта и выполните ",{"type":455,"tag":51,"props":516,"children":518},{"className":517},[],[519],{"type":459,"value":520},"./script.sh",{"type":459,"value":522}," или вызовите его по полному пути (",{"type":455,"tag":51,"props":524,"children":526},{"className":525},[],[527],{"type":459,"value":528},"/path/to/script.sh",{"type":459,"value":65},{"data":531,"body":532},{},{"type":452,"children":533},[534],{"type":455,"tag":20,"props":535,"children":536},{},[537,538,544,546,552],{"type":459,"value":286},{"type":455,"tag":51,"props":539,"children":541},{"className":540},[],[542],{"type":459,"value":543},"bash -n script.sh",{"type":459,"value":545}," для синтаксической проверки, ",{"type":455,"tag":51,"props":547,"children":549},{"className":548},[],[550],{"type":459,"value":551},"bash -x script.sh",{"type":459,"value":553}," для трассировки выполнения, либо проверьте сообщения об ошибках в stderr.",{"data":555,"body":556},{},{"type":452,"children":557},[558],{"type":455,"tag":20,"props":559,"children":560},{},[561,562,567,568,573],{"type":459,"value":94},{"type":455,"tag":51,"props":563,"children":565},{"className":564},[],[566],{"type":459,"value":97},{"type":459,"value":98},{"type":455,"tag":51,"props":569,"children":571},{"className":570},[],[572],{"type":459,"value":101},{"type":459,"value":102},{"data":575,"body":576},{},{"type":452,"children":577},[578],{"type":455,"tag":20,"props":579,"children":580},{},[581,582,587,588,593],{"type":459,"value":109},{"type":455,"tag":51,"props":583,"children":585},{"className":584},[],[586],{"type":459,"value":112},{"type":459,"value":113},{"type":455,"tag":51,"props":589,"children":591},{"className":590},[],[592],{"type":459,"value":116},{"type":459,"value":102},{"data":595,"body":596},{},{"type":452,"children":597},[598],{"type":455,"tag":20,"props":599,"children":600},{},[601,602,607],{"type":459,"value":123},{"type":455,"tag":51,"props":603,"children":605},{"className":604},[],[606],{"type":459,"value":126},{"type":459,"value":102},{"data":609,"body":610},{},{"type":452,"children":611},[612],{"type":455,"tag":20,"props":613,"children":614},{},[615,616,621,622,627],{"type":459,"value":169},{"type":455,"tag":51,"props":617,"children":619},{"className":618},[],[620],{"type":459,"value":172},{"type":459,"value":173},{"type":455,"tag":51,"props":623,"children":625},{"className":624},[],[626],{"type":459,"value":176},{"type":459,"value":102},{"data":629,"body":630},{},{"type":452,"children":631},[632],{"type":455,"tag":20,"props":633,"children":634},{},[635,636,641,642,647,649,655],{"type":459,"value":183},{"type":455,"tag":51,"props":637,"children":639},{"className":638},[],[640],{"type":459,"value":186},{"type":459,"value":54},{"type":455,"tag":51,"props":643,"children":645},{"className":644},[],[646],{"type":459,"value":189},{"type":459,"value":648}," и т.д. Пример: ",{"type":455,"tag":51,"props":650,"children":652},{"className":651},[],[653],{"type":459,"value":654},"echo \"Привет, $1!\"",{"type":459,"value":102},{"data":657,"body":658},{},{"type":452,"children":659},[660],{"type":455,"tag":20,"props":661,"children":662},{},[663,664,669,670,675],{"type":459,"value":286},{"type":455,"tag":51,"props":665,"children":667},{"className":666},[],[668],{"type":459,"value":289},{"type":459,"value":290},{"type":455,"tag":51,"props":671,"children":673},{"className":672},[],[674],{"type":459,"value":293},{"type":459,"value":294},[677],{"id":678,"title":679,"appliesTo":680,"author":10,"body":685,"canonical":381,"code":133,"createdAt":1229,"description":1230,"difficulty":1231,"draft":385,"estimatedTime":1232,"extension":387,"faq":1233,"howToSteps":1246,"howToTotalTime":420,"image":381,"keywords":1265,"locale":430,"meta":1274,"navigation":150,"path":436,"platform":433,"related":1275,"section":438,"seo":1279,"severity":133,"stem":1280,"summary":1281,"tags":1282,"twitterCreator":381,"twitterSite":381,"type":447,"updatedAt":1229,"__hash__":1286},"content_ru/guides/linux/debug-bash-script.md","Как отладить Bash-скрипт: пошаговое руководство по исправлению ошибок",[681,682,683,684],"Bash 5.x","Ubuntu 20.04/22.04","Debian 11","Fedora 36+",{"type":12,"value":686,"toc":1216},[687,689,692,694,736,742,744,748,754,770,777,781,792,825,828,832,839,868,884,888,895,965,971,981,987,1023,1026,1037,1057,1061,1064,1079,1096,1098,1101,1113,1120,1143,1150,1152,1210,1213],[15,688,18],{"id":17},[20,690,691],{},"Работа с Bash-скриптами часто бывает быстрой, но когда что-то идёт не так, отладка может затянуться. В этой статье мы покажем, как использовать встроенные инструменты отладки Bash, чтобы быстро находить и устранять ошибки, не прибегая к сторонним IDE. После выполнения этих шагов вы сможете самостоятельно диагностировать проблемы, даже если скрипт сложный.",[15,693,26],{"id":25},[28,695,696,702,712,723],{},[31,697,698,701],{},[34,699,700],{},"Операционная система",": Linux (Ubuntu, Debian, Fedora и т.д.)",[31,703,704,707,708,711],{},[34,705,706],{},"Версия Bash",": 5.0 или выше (",[51,709,710],{},"bash --version",")",[31,713,714,717,718,54,720,722],{},[34,715,716],{},"Инструменты",": текстовый редактор (например, ",[51,719,64],{},[51,721,60],{},"), терминал с правами доступа пользователя (sudo не требуется для простых скриптов)",[31,724,725,728,729,49,732,735],{},[34,726,727],{},"Необязательно",": отладчик ",[51,730,731],{},"bashdb",[51,733,734],{},"sudo apt install bashdb"," на Debian/Ubuntu)",[20,737,738,739,102],{},"Все команды предоставлены для Bash по умолчанию. Если у вас старая версия, обновите систему с помощью ",[51,740,741],{},"sudo apt update && sudo apt upgrade",[278,743],{},[15,745,747],{"id":746},"шаг-1-запустить-скрипт-с-трассировкой","Шаг 1: Запустить скрипт с трассировкой",[20,749,750,751,102],{},"Самый быстрый способ увидеть, что происходит, — это запустить скрипт с ключом ",[51,752,753],{},"-x",[128,755,757],{"className":130,"code":756,"language":132,"meta":133,"style":133},"bash -x script.sh\n",[51,758,759],{"__ignoreMap":133},[137,760,761,764,767],{"class":139,"line":140},[137,762,132],{"class":763},"sScJk",[137,765,766],{"class":157}," -x",[137,768,769],{"class":161}," script.sh\n",[20,771,772,773,776],{},"Команда ",[51,774,775],{},"bash -x"," выводит каждую команду перед её выполнением, её параметры и текущее значение переменных. Это полезно для выявления ненужных веток или бесконечных циклов.",[15,778,780],{"id":779},"шаг-2-добавить-точку-останова-с-помощью-trap","Шаг 2: Добавить точку останова с помощью trap",[20,782,783,784,787,788,791],{},"Для более точной отладки можно использовать ",[51,785,786],{},"trap"," с действием ",[51,789,790],{},"DEBUG",". Это вызовет пользовательское сообщение перед каждой командой.",[128,793,795],{"className":130,"code":794,"language":132,"meta":133,"style":133},"#!/usr/bin/env bash\n\ntrap 'echo \">>> Строка $LINENO\" DEBUG' DEBUG\n\n# Остальной скрипт...\n",[51,796,797,802,806,816,820],{"__ignoreMap":133},[137,798,799],{"class":139,"line":140},[137,800,801],{"class":143},"#!/usr/bin/env bash\n",[137,803,804],{"class":139,"line":147},[137,805,151],{"emptyLinePlaceholder":150},[137,807,808,810,813],{"class":139,"line":154},[137,809,786],{"class":157},[137,811,812],{"class":161}," 'echo \">>> Строка $LINENO\" DEBUG'",[137,814,815],{"class":161}," DEBUG\n",[137,817,818],{"class":139,"line":231},[137,819,151],{"emptyLinePlaceholder":150},[137,821,822],{"class":139,"line":246},[137,823,824],{"class":143},"# Остальной скрипт...\n",[20,826,827],{},"Теперь перед каждой командой будет выводиться сообщение с номером строки, что позволяет быстро найти проблемный участок.",[15,829,831],{"id":830},"шаг-3-включить-автоматическое-завершение-при-ошибке","Шаг 3: Включить автоматическое завершение при ошибке",[20,833,834,835,838],{},"Если скрипт должен завершаться при первой ошибке, добавьте ",[51,836,837],{},"set -e"," в начало.",[128,840,842],{"className":130,"code":841,"language":132,"meta":133,"style":133},"#!/usr/bin/env bash\nset -e  # завершать скрипт при любой ошибке\n\n# Основная логика скрипта...\n",[51,843,844,848,859,863],{"__ignoreMap":133},[137,845,846],{"class":139,"line":140},[137,847,801],{"class":143},[137,849,850,853,856],{"class":139,"line":147},[137,851,852],{"class":157},"set",[137,854,855],{"class":157}," -e",[137,857,858],{"class":143},"  # завершать скрипт при любой ошибке\n",[137,860,861],{"class":139,"line":154},[137,862,151],{"emptyLinePlaceholder":150},[137,864,865],{"class":139,"line":231},[137,866,867],{"class":143},"# Основная логика скрипта...\n",[20,869,870,871,873,874,54,876,879,880,883],{},"Внимание: ",[51,872,837],{}," не работает для команд в условных выражениях (",[51,875,209],{},[51,877,878],{},"while","). Используйте ",[51,881,882],{},"set -o pipefail",", чтобы также завершать скрипт при ошибке в конвейере.",[15,885,887],{"id":886},"шаг-4-проверить-переменные-и-пути","Шаг 4: Проверить переменные и пути",[20,889,890,891,894],{},"Для отладки значений переменных добавьте ",[51,892,893],{},"set -x"," в нужных местах или напрямую выведите их.",[128,896,898],{"className":130,"code":897,"language":132,"meta":133,"style":133},"# внутри скрипта\necho \"DEBUG: значение переменной input_file = $input_file\"\n[ -f \"$input_file\" ] || { echo \"Ошибка: файл $input_file не найден\"; exit 1; }\n",[51,899,900,905,918],{"__ignoreMap":133},[137,901,902],{"class":139,"line":140},[137,903,904],{"class":143},"# внутри скрипта\n",[137,906,907,909,912,915],{"class":139,"line":147},[137,908,158],{"class":157},[137,910,911],{"class":161}," \"DEBUG: значение переменной input_file = ",[137,913,914],{"class":212},"$input_file",[137,916,917],{"class":161},"\"\n",[137,919,920,923,926,929,931,934,937,940,943,945,948,950,953,956,959,962],{"class":139,"line":154},[137,921,922],{"class":212},"[ ",[137,924,925],{"class":208},"-f",[137,927,928],{"class":161}," \"",[137,930,914],{"class":212},[137,932,933],{"class":161},"\"",[137,935,936],{"class":212}," ] ",[137,938,939],{"class":208},"||",[137,941,942],{"class":212}," { ",[137,944,158],{"class":157},[137,946,947],{"class":161}," \"Ошибка: файл ",[137,949,914],{"class":212},[137,951,952],{"class":161}," не найден\"",[137,954,955],{"class":212},"; ",[137,957,958],{"class":157},"exit",[137,960,961],{"class":157}," 1",[137,963,964],{"class":212},"; }\n",[20,966,967,968,970],{},"Теперь вы увидите значения даже при включённом ",[51,969,893],{},", что полезно для скриптов, работающих с путями и файлами.",[15,972,974,975,977,978],{"id":973},"шаг-5-использовать-отладочные-инструменты-вроде-bashdb-или-gdb","Шаг 5: Использовать отладочные инструменты вроде ",[51,976,731],{}," или ",[51,979,980],{},"gdb",[20,982,983,984,986],{},"Для более продвинутой отладки установите ",[51,985,731],{}," (доступен в большинстве дистрибутивов).",[128,988,990],{"className":130,"code":989,"language":132,"meta":133,"style":133},"sudo apt install bashdb   # Debian/Ubuntu\nsudo dnf install bashdb   # Fedora\n",[51,991,992,1009],{"__ignoreMap":133},[137,993,994,997,1000,1003,1006],{"class":139,"line":140},[137,995,996],{"class":763},"sudo",[137,998,999],{"class":161}," apt",[137,1001,1002],{"class":161}," install",[137,1004,1005],{"class":161}," bashdb",[137,1007,1008],{"class":143},"   # Debian/Ubuntu\n",[137,1010,1011,1013,1016,1018,1020],{"class":139,"line":147},[137,1012,996],{"class":763},[137,1014,1015],{"class":161}," dnf",[137,1017,1002],{"class":161},[137,1019,1005],{"class":161},[137,1021,1022],{"class":143},"   # Fedora\n",[20,1024,1025],{},"Затем запустите интерактивную сессию:",[128,1027,1029],{"className":130,"code":1028,"language":132,"meta":133,"style":133},"bashdb script.sh\n",[51,1030,1031],{"__ignoreMap":133},[137,1032,1033,1035],{"class":139,"line":140},[137,1034,731],{"class":763},[137,1036,769],{"class":161},[20,1038,1039,1040,1042,1043,54,1046,54,1049,1052,1053,1056],{},"Внутри ",[51,1041,731],{}," вы можете использовать команды ",[51,1044,1045],{},"break",[51,1047,1048],{},"continue",[51,1050,1051],{},"step"," и ",[51,1054,1055],{},"print",", чтобы управлять выполнением и исследовать состояние скрипта.",[15,1058,1060],{"id":1059},"шаг-6-проверить-права-доступа-к-скрипту","Шаг 6: Проверить права доступа к скрипту",[20,1062,1063],{},"Частая причина сбоев — отсутствие прав на выполнение.",[128,1065,1067],{"className":130,"code":1066,"language":132,"meta":133,"style":133},"chmod +x script.sh\n",[51,1068,1069],{"__ignoreMap":133},[137,1070,1071,1074,1077],{"class":139,"line":140},[137,1072,1073],{"class":763},"chmod",[137,1075,1076],{"class":161}," +x",[137,1078,769],{"class":161},[20,1080,1081,1082,1085,1086,1089,1090,1092,1093,102],{},"Также убедитесь, что скрипт доступен для чтения (",[51,1083,1084],{},"-r","). Если у скрипта указан неправильный shebang (",[51,1087,1088],{},"#!/usr/bin/env bash","), убедитесь, что ",[51,1091,132],{}," присутствует в ",[51,1094,1095],{},"$PATH",[15,1097,298],{"id":297},[20,1099,1100],{},"После внесения изменений перезапустите скрипт с той же отладочной информацией:",[128,1102,1103],{"className":130,"code":756,"language":132,"meta":133,"style":133},[51,1104,1105],{"__ignoreMap":133},[137,1106,1107,1109,1111],{"class":139,"line":140},[137,1108,132],{"class":763},[137,1110,766],{"class":157},[137,1112,769],{"class":161},[20,1114,1115,1116,1119],{},"Если больше нет лишних строк вывода и скрипт завершается с кодом ",[51,1117,1118],{},"0",", отладка успешна. Для автоматизации вы можете записать лог в файл:",[128,1121,1123],{"className":130,"code":1122,"language":132,"meta":133,"style":133},"bash -x script.sh > debug.log 2>&1\n",[51,1124,1125],{"__ignoreMap":133},[137,1126,1127,1129,1131,1134,1137,1140],{"class":139,"line":140},[137,1128,132],{"class":763},[137,1130,766],{"class":157},[137,1132,1133],{"class":161}," script.sh",[137,1135,1136],{"class":208}," >",[137,1138,1139],{"class":161}," debug.log",[137,1141,1142],{"class":208}," 2>&1\n",[20,1144,1145,1146,1149],{},"Проверьте ",[51,1147,1148],{},"debug.log"," на наличие ошибок или unexpected значений.",[15,1151,313],{"id":312},[28,1153,1154,1165,1181,1194],{},[31,1155,1156,1159,1160,49,1162,65],{},[34,1157,1158],{},"Скрипт завершается со статусом 127"," – команда не найдена. Проверьте правильность написания и наличие её в ",[51,1161,1095],{},[51,1163,1164],{},"echo $PATH",[31,1166,1167,1174,1175,1178,1179,102],{},[34,1168,1169,1171,1172],{},[51,1170,837],{}," не срабатывает внутри ",[51,1173,209],{}," – оберните условие в ",[51,1176,1177],{},"|| true"," или используйте ",[51,1180,882],{},[31,1182,1183,1186,1187,1190,1191,102],{},[34,1184,1185],{},"Скрипт зависает"," – возможно, бесконечный цикл. Используйте ",[51,1188,1189],{},"timeout"," для принудительного завершения: ",[51,1192,1193],{},"timeout 30 ./script.sh",[31,1195,1196,1202,1203,1205,1206,1209],{},[34,1197,1198,1199],{},"Нет вывода ",[51,1200,1201],{},"trap DEBUG"," – убедитесь, что ",[51,1204,786],{}," определён ",[34,1207,1208],{},"перед"," выполнением кода скрипта (в начале файла).",[20,1211,1212],{},"Эти распространённые проблемы и их решения помогут быстро вернуть скрипт в рабочее состояние.",[364,1214,1215],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":133,"searchDepth":147,"depth":147,"links":1217},[1218,1219,1220,1221,1222,1223,1224,1226,1227,1228],{"id":17,"depth":147,"text":18},{"id":25,"depth":147,"text":26},{"id":746,"depth":147,"text":747},{"id":779,"depth":147,"text":780},{"id":830,"depth":147,"text":831},{"id":886,"depth":147,"text":887},{"id":973,"depth":147,"text":1225},"Шаг 5: Использовать отладочные инструменты вроде bashdb или gdb",{"id":1059,"depth":147,"text":1060},{"id":297,"depth":147,"text":298},{"id":312,"depth":147,"text":313},"2026-07-09 12:24:49","Пошаговая инструкция по отладке Bash-скриптов на Linux — 10 минут и скрипт будет работать. Узнайте, как использовать bash -x, set -e и отладочные инструменты.","medium","10-15 мин",[1234,1237,1240,1243],{"question":1235,"answer":1236},"Как включить пошаговый режим отладки в Bash?","Запустите скрипт с ключом `-x`: `bash -x script.sh` — это выведет трассировку выполнения команд.",{"question":1238,"answer":1239},"Почему скрипт завершается со статусом 127?","Обычно это означает, что команда не найдена. Проверьте правильность написания и наличие её в PATH.",{"question":1241,"answer":1242},"Как избежать зависания скрипта при ошибке?","Добавьте `set -e` в начало скрипта — это заставит его завершиться при первой ошибке.",{"question":1244,"answer":1245},"Как отладить скрипт с использованием переменных и массивов?","Добавьте `set -x` перед печатью значений и проверьте значения с помощью `echo ${var}` внутри скрипта.",[1247,1250,1253,1256,1259,1262],{"name":1248,"text":1249},"Запустить скрипт с трассировкой","Используйте `bash -x script.sh`. Это покажет каждую выполненную команду, её параметры и текущее значение переменных.",{"name":1251,"text":1252},"Добавить точку останова с помощью trap","Добавьте `trap 'echo \"Остановка на строке $LINENO\"' DEBUG` — теперь перед каждой командой будет выводиться номер строки.",{"name":1254,"text":1255},"Включить автоматическое завершение при ошибке","Поместите `set -e` в начало скрипта — это предотвратит выполнение дальнейших команд при ошибке.",{"name":1257,"text":1258},"Проверить переменные и пути","Добавьте `set -x` и `echo \"DEBUG: $var\"` в нужных местах, чтобы увидеть значения переменных в процессе выполнения.",{"name":1260,"text":1261},"Использовать отладочные инструменты вроде `bashdb` или `gdb`","Установите `bashdb` (`sudo apt install bashdb`) и запустите `bashdb script.sh` для интерактивной отладки.",{"name":1263,"text":1264},"Проверить права доступа к скрипту","Убедитесь, что скрипт исполняем (`chmod +x script.sh`) и что у вас есть права на чтение и выполнение.",[1266,1267,1268,1269,1270,1271,1272,1273],"отладка bash скрипта","bash -x скрипт.sh","отладить bash скрипт","set -e отладка","отладочные инструменты bash","bash отладка скрипта","bash ошибка скрипта","bash debug скрипта",{},[1276,1277,1278],"/guides/linux/debugging-shell-scripts","/guides/linux/use-bash-trap","/errors/linux/bash-permission-denied",{"title":679,"description":1230},"guides/linux/debug-bash-script","В этом руководстве вы узнаете, как быстро выявлять и устранять ошибки в Bash-скриптах с помощью встроенных инструментов отладки. Мы покажем конкретные команды и объясним, что делать при распространённых проблемах.",[444,443,1283,445,1284,1285],"отладка","программирование","советы","gvbFF0LhyXfQ-q7fzpd-_mT6ggfdm_1H1qqVXcystcU"]