[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/shell-scripting-basics":3,"mdc-k8zqkf-key":577,"mdc-qe3fio-key":617,"mdc-h51zwd-key":657,"mdc-79wwcv-key":680,"mdc-dc3h68-key":719,"mdc--bthpok-key":754,"mdc--elpl1-key":771,"mdc-uym8ul-key":796,"mdc--4q7kro-key":813,"mdc-kb1ynv-key":829,"related-/guides/linux/scripting-advanced,/guides/linux/creating-shell-functions,/guides/linux/debugging-shell-scripts":854},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":509,"code":67,"createdAt":510,"description":511,"difficulty":512,"draft":513,"estimatedTime":514,"extension":515,"faq":516,"howToSteps":529,"howToTotalTime":548,"image":509,"keywords":549,"locale":556,"meta":557,"navigation":558,"path":559,"platform":560,"related":561,"section":565,"seo":566,"severity":67,"stem":567,"summary":568,"tags":569,"twitterCreator":509,"twitterSite":509,"type":575,"updatedAt":510,"__hash__":576},"content_ru/guides/linux/shell-scripting-basics.md","Основы shell-скриптинга в Linux: простые команды и автоматизация задач за 10 минут",[7,8,9,10],"Ubuntu 22.04","Debian 12","Fedora 38","openSUSE Leap 15","FixPedia Team",{"type":13,"value":14,"toc":495},"minimark",[15,20,24,28,41,44,48,53,61,111,114,130,134,141,150,153,161,165,168,200,203,231,235,238,308,312,315,369,373,376,425,429,432,451,455,488,491],[16,17,19],"h2",{"id":18},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,22,23],"p",{},"Shell-скриптинг — это мощный инструмент для автоматизации повторяющихся задач в Linux. Используя Bash, вы можете объединять команды в исполняемые файлы, которые работают быстро и повторяемо. В этом гайде вы освоите базовые конструкции: создание исполняемого скрипта, работу с переменными, условную логику, циклы и функции. После прочтения вы сможете писать простые скрипты, которые сэкономят время и упростят повседневную работу с системой.",[16,25,27],{"id":26},"требования-подготовка","Требования / Подготовка",[29,30,31,35,38],"ul",{},[32,33,34],"li",{},"Любая современная дистрибутива Linux (Ubuntu 22.04, Debian 12, Fedora 38, openSUSE Leap 15 и др.).",[32,36,37],{},"Доступ к терминалу с правами обычного пользователя (для выполнения скриптов не требуются права root, но для некоторых системных задач они могут понадобиться).",[32,39,40],{},"Базовые знания командной строки Linux (знание путей, символов подчеркивания и пробелов в именах файлов).",[42,43],"in-article-ad",{},[16,45,47],{"id":46},"пошледовая-инструкция","Пошледовая инструкция",[49,50,52],"h3",{"id":51},"шаг-1-создание-исполняемого-файла","Шаг 1: Создание исполняемого файла",[21,54,55,56,60],{},"Создайте файл ",[57,58,59],"code",{},"script.sh"," и добавьте shebang в начале, чтобы Bash интерпретировал его:",[62,63,68],"pre",{"className":64,"code":65,"language":66,"meta":67,"style":67},"language-bash shiki shiki-themes github-light github-dark","cat > script.sh \u003C\u003C 'EOF'\n#!/bin/bash\necho 'Привет, мир!'\nEOF\n","bash","",[57,69,70,93,99,105],{"__ignoreMap":67},[71,72,75,79,83,87,90],"span",{"class":73,"line":74},"line",1,[71,76,78],{"class":77},"sScJk","cat",[71,80,82],{"class":81},"szBVR"," >",[71,84,86],{"class":85},"sZZnC"," script.sh",[71,88,89],{"class":81}," \u003C\u003C",[71,91,92],{"class":85}," 'EOF'\n",[71,94,96],{"class":73,"line":95},2,[71,97,98],{"class":85},"#!/bin/bash\n",[71,100,102],{"class":73,"line":101},3,[71,103,104],{"class":85},"echo 'Привет, мир!'\n",[71,106,108],{"class":73,"line":107},4,[71,109,110],{"class":85},"EOF\n",[21,112,113],{},"Сделайте файл исполняемым:",[62,115,117],{"className":64,"code":116,"language":66,"meta":67,"style":67},"chmod +x script.sh\n",[57,118,119],{"__ignoreMap":67},[71,120,121,124,127],{"class":73,"line":74},[71,122,123],{"class":77},"chmod",[71,125,126],{"class":85}," +x",[71,128,129],{"class":85}," script.sh\n",[49,131,133],{"id":132},"шаг-2-запуск-скрипта","Шаг 2: Запуск скрипта",[21,135,136,137,140],{},"Запустите скрипт напрямую, используя ",[57,138,139],{},"./",":",[62,142,144],{"className":64,"code":143,"language":66,"meta":67,"style":67},"./script.sh\n",[57,145,146],{"__ignoreMap":67},[71,147,148],{"class":73,"line":74},[71,149,143],{"class":77},[21,151,152],{},"В результате вы увидите:",[62,154,159],{"className":155,"code":157,"language":158},[156],"language-text","Привет, мир!\n","text",[57,160,157],{"__ignoreMap":67},[49,162,164],{"id":163},"шаг-3-использование-переменных","Шаг 3: Использование переменных",[21,166,167],{},"Переменные позволяют хранить и повторно использовать данные:",[62,169,171],{"className":64,"code":170,"language":66,"meta":67,"style":67},"name='Alice'\necho \"Привет, $name!\"\n",[57,172,173,185],{"__ignoreMap":67},[71,174,175,179,182],{"class":73,"line":74},[71,176,178],{"class":177},"sVt8B","name",[71,180,181],{"class":81},"=",[71,183,184],{"class":85},"'Alice'\n",[71,186,187,191,194,197],{"class":73,"line":95},[71,188,190],{"class":189},"sj4cs","echo",[71,192,193],{"class":85}," \"Привет, ",[71,195,196],{"class":177},"$name",[71,198,199],{"class":85},"!\"\n",[21,201,202],{},"Для многословных значений используйте кавычки:",[62,204,206],{"className":64,"code":205,"language":66,"meta":67,"style":67},"msg=\"Добро пожаловать в Linux\"\necho \"$msg\"\n",[57,207,208,218],{"__ignoreMap":67},[71,209,210,213,215],{"class":73,"line":74},[71,211,212],{"class":177},"msg",[71,214,181],{"class":81},[71,216,217],{"class":85},"\"Добро пожаловать в Linux\"\n",[71,219,220,222,225,228],{"class":73,"line":95},[71,221,190],{"class":189},[71,223,224],{"class":85}," \"",[71,226,227],{"class":177},"$msg",[71,229,230],{"class":85},"\"\n",[49,232,234],{"id":233},"шаг-4-основы-условной-логики","Шаг 4: Основы условной логики",[21,236,237],{},"Условия позволяют ветвить выполнение скрипта:",[62,239,241],{"className":64,"code":240,"language":66,"meta":67,"style":67},"value='production'\nif [ \"$value\" = \"production\" ]; then\n  echo \"Режим: продакшн\"\nelse\n  echo \"Режим: разработка\"\nfi\n",[57,242,243,253,281,289,294,302],{"__ignoreMap":67},[71,244,245,248,250],{"class":73,"line":74},[71,246,247],{"class":177},"value",[71,249,181],{"class":81},[71,251,252],{"class":85},"'production'\n",[71,254,255,258,261,264,267,269,272,275,278],{"class":73,"line":95},[71,256,257],{"class":81},"if",[71,259,260],{"class":177}," [ ",[71,262,263],{"class":85},"\"",[71,265,266],{"class":177},"$value",[71,268,263],{"class":85},[71,270,271],{"class":81}," =",[71,273,274],{"class":85}," \"production\"",[71,276,277],{"class":177}," ]; ",[71,279,280],{"class":81},"then\n",[71,282,283,286],{"class":73,"line":101},[71,284,285],{"class":189},"  echo",[71,287,288],{"class":85}," \"Режим: продакшн\"\n",[71,290,291],{"class":73,"line":107},[71,292,293],{"class":81},"else\n",[71,295,297,299],{"class":73,"line":296},5,[71,298,285],{"class":189},[71,300,301],{"class":85}," \"Режим: разработка\"\n",[71,303,305],{"class":73,"line":304},6,[71,306,307],{"class":81},"fi\n",[49,309,311],{"id":310},"шаг-5-создание-цикла","Шаг 5: Создание цикла",[21,313,314],{},"Циклы повторяют действия несколько раз:",[62,316,318],{"className":64,"code":317,"language":66,"meta":67,"style":67},"for i in 1 2 3 4 5; do\n  echo \"Итерация $i\"\ndone\n",[57,319,320,352,364],{"__ignoreMap":67},[71,321,322,325,328,331,334,337,340,343,346,349],{"class":73,"line":74},[71,323,324],{"class":81},"for",[71,326,327],{"class":177}," i ",[71,329,330],{"class":81},"in",[71,332,333],{"class":85}," 1",[71,335,336],{"class":85}," 2",[71,338,339],{"class":85}," 3",[71,341,342],{"class":85}," 4",[71,344,345],{"class":85}," 5",[71,347,348],{"class":177},"; ",[71,350,351],{"class":81},"do\n",[71,353,354,356,359,362],{"class":73,"line":95},[71,355,285],{"class":189},[71,357,358],{"class":85}," \"Итерация ",[71,360,361],{"class":177},"$i",[71,363,230],{"class":85},[71,365,366],{"class":73,"line":101},[71,367,368],{"class":81},"done\n",[49,370,372],{"id":371},"шаг-6-добавление-функций","Шаг 6: Добавление функций",[21,374,375],{},"Функции упрощают реиспользование кода:",[62,377,379],{"className":64,"code":378,"language":66,"meta":67,"style":67},"greet() {\n  local name=$1\n  echo \"Привет, $name!\"\n}\ngreet \"Bob\"\n",[57,380,381,389,403,413,418],{"__ignoreMap":67},[71,382,383,386],{"class":73,"line":74},[71,384,385],{"class":77},"greet",[71,387,388],{"class":177},"() {\n",[71,390,391,394,397,399],{"class":73,"line":95},[71,392,393],{"class":81},"  local",[71,395,396],{"class":177}," name",[71,398,181],{"class":81},[71,400,402],{"class":401},"s4XuR","$1\n",[71,404,405,407,409,411],{"class":73,"line":101},[71,406,285],{"class":189},[71,408,193],{"class":85},[71,410,196],{"class":177},[71,412,199],{"class":85},[71,414,415],{"class":73,"line":107},[71,416,417],{"class":177},"}\n",[71,419,420,422],{"class":73,"line":296},[71,421,385],{"class":77},[71,423,424],{"class":85}," \"Bob\"\n",[16,426,428],{"id":427},"проверка-результата","Проверка результата",[21,430,431],{},"Убедитесь, что скрипт работает как ожидается:",[433,434,435,441,444],"ol",{},[32,436,437,438],{},"Проверьте синтаксис: ",[57,439,440],{},"bash -n script.sh",[32,442,443],{},"Запустите скрипт и сравните вывод с ожидаемым результатом.",[32,445,446,447,450],{},"Если нужны дополнительные отладочные данные, добавьте ",[57,448,449],{},"set -x"," в начало скрипта.",[16,452,454],{"id":453},"возможные-проблемы","Возможные проблемы",[29,456,457,472,482],{},[32,458,459,467,468,471],{},[460,461,462,463,466],"strong",{},"Команда не найдена (",[57,464,465],{},"command not found",")"," – убедитесь, что команды установлены (",[57,469,470],{},"sudo apt-get install \u003Cpackage>",").",[32,473,474,477,478,481],{},[460,475,476],{},"Доступ запрещён"," – скрипт может требовать прав root для записи в системные каталоги; используйте ",[57,479,480],{},"sudo",".",[32,483,484,487],{},[460,485,486],{},"Неправильные кавычки"," – смешение кавычек приводит к необычному поведению; используйте одинарные кавычки для статичных строк и двойные для переменных.",[21,489,490],{},"Теперь у вас есть базовый набор навыков для написания полезных и автоматизированных shell-скриптов в Linux. Удачного кодирования!",[492,493,494],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":67,"searchDepth":95,"depth":95,"links":496},[497,498,499,507,508],{"id":18,"depth":95,"text":19},{"id":26,"depth":95,"text":27},{"id":46,"depth":95,"text":47,"children":500},[501,502,503,504,505,506],{"id":51,"depth":101,"text":52},{"id":132,"depth":101,"text":133},{"id":163,"depth":101,"text":164},{"id":233,"depth":101,"text":234},{"id":310,"depth":101,"text":311},{"id":371,"depth":101,"text":372},{"id":427,"depth":95,"text":428},{"id":453,"depth":95,"text":454},null,"2026-07-12 22:21:44","Узнайте, как написать первый скрипт на Bash, использовать переменные, циклы и функции. Пошаговая инструкция для начинающих за 10 минут — начните автоматизировать задачи в Linux уже сегодня.","easy",false,"10-15 мин","md",[517,520,523,526],{"answer":518,"question":519},"Создайте файл `script.sh`, добавьте shebang `#!/bin/bash` и напишите простую команду, например `echo Hello`. Затем сделайте файл исполняемым: `chmod +x script.sh`.","С чего начать написание первого shell-скрипта?",{"answer":521,"question":522},"Параметры передаются через `$1`, `$2` и т.д. Например, `echo First param: $1`. Для обработки всех параметров используйте цикл `for arg in \"$@\"; do ... done`.","Как передать параметры скрипту при запуске?",{"answer":524,"question":525},"Возможная причина — отсутствие интерпретатора Bash в shebang или скрипт запущен без прав на исполнение. Убедитесь, что файл имеет правильный shebang `#!/bin/bash` и права `+x`.","Почему скрипт выдает ошибку «команда не найдена»?",{"answer":527,"question":528},"Используйте `set -x` для трассировки, `bash -n` для синтаксической проверки и добавляйте `echo` для вывода промежуточных значений. Также полезен `grep -n` для поиска строк кода.","Как отладить ошибки в скрипте?",[530,533,536,539,542,545],{"name":531,"text":532},"Создание исполняемого файла","Создайте файл `script.sh`, добавьте shebang `#!/bin/bash` и напишите команду `echo 'Привет, мир!'`. Сделайте файл исполняемым: `chmod +x script.sh`.",{"name":534,"text":535},"Запуск скрипта","Запустите скрипт напрямую: `./script.sh`. Bash интерпретирует shebang и выполнит команды.",{"name":537,"text":538},"Использование переменных","Присвойте значение переменной: `name='Alice'`, затем выведите её: `echo \"Привет, $name!\"`. Используйте кавычки для многословных значений.",{"name":540,"text":541},"Основы условной логики","Добавьте условие с `if [ \"$var\" = \"value\" ]; then echo \"Найдено\"; else echo \"Не найдено\"; fi`. Это позволяет ветвить выполнение.",{"name":543,"text":544},"Создание цикла","Используйте `for i in 1 2 3; do echo \"Итерация $i\"; done`, чтобы повторить действия несколько раз.",{"name":546,"text":547},"Добавление функций","Определите функцию: `my_func() { echo \"Внутри функции\"; }`. Вызовите её: `my_func`. Функции упрощают реиспользование кода.","PT15M",[550,551,552,553,554,555],"обучение shell-скриптингу Linux","как написать скрипт на Bash","базовые конструкции shell-скриптов","переменные и циклы в Bash","автоматизация задач в Linux скриптами","код ошибки shell-скрипта 127","ru_RU",{},true,"/guides/linux/shell-scripting-basics","linux",[562,563,564],"/guides/linux/scripting-advanced","/guides/linux/creating-shell-functions","/guides/linux/debugging-shell-scripts","Гайды Linux",{"title":5,"description":511},"guides/linux/shell-scripting-basics","В этом гайде вы научитесь создавать простые shell-скрипты, использовать базовые конструкции и автоматизировать повседневные задачи в Linux. После прочтения вы сможете писать скрипты, которые экономят время и упрощают работу с системой.",[570,571,572,573,574],"Linux","Bash","скриптинг","автоматизация","программирование","guide","jdpguhww-vgpE7fADUqznP3mHoitcm01XliHkp1gvPM",{"data":578,"body":579},{},{"type":580,"children":581},"root",[582],{"type":583,"tag":21,"props":584,"children":585},"element",{},[586,587,592,594,600,602,608,610,616],{"type":158,"value":55},{"type":583,"tag":57,"props":588,"children":590},{"className":589},[],[591],{"type":158,"value":59},{"type":158,"value":593},", добавьте shebang ",{"type":583,"tag":57,"props":595,"children":597},{"className":596},[],[598],{"type":158,"value":599},"#!/bin/bash",{"type":158,"value":601}," и напишите простую команду, например ",{"type":583,"tag":57,"props":603,"children":605},{"className":604},[],[606],{"type":158,"value":607},"echo Hello",{"type":158,"value":609},". Затем сделайте файл исполняемым: ",{"type":583,"tag":57,"props":611,"children":613},{"className":612},[],[614],{"type":158,"value":615},"chmod +x script.sh",{"type":158,"value":481},{"data":618,"body":619},{},{"type":580,"children":620},[621],{"type":583,"tag":21,"props":622,"children":623},{},[624,626,632,634,640,642,648,650,656],{"type":158,"value":625},"Параметры передаются через ",{"type":583,"tag":57,"props":627,"children":629},{"className":628},[],[630],{"type":158,"value":631},"$1",{"type":158,"value":633},", ",{"type":583,"tag":57,"props":635,"children":637},{"className":636},[],[638],{"type":158,"value":639},"$2",{"type":158,"value":641}," и т.д. Например, ",{"type":583,"tag":57,"props":643,"children":645},{"className":644},[],[646],{"type":158,"value":647},"echo First param: $1",{"type":158,"value":649},". Для обработки всех параметров используйте цикл ",{"type":583,"tag":57,"props":651,"children":653},{"className":652},[],[654],{"type":158,"value":655},"for arg in \"$@\"; do ... done",{"type":158,"value":481},{"data":658,"body":659},{},{"type":580,"children":660},[661],{"type":583,"tag":21,"props":662,"children":663},{},[664,666,671,673,679],{"type":158,"value":665},"Возможная причина — отсутствие интерпретатора Bash в shebang или скрипт запущен без прав на исполнение. Убедитесь, что файл имеет правильный shebang ",{"type":583,"tag":57,"props":667,"children":669},{"className":668},[],[670],{"type":158,"value":599},{"type":158,"value":672}," и права ",{"type":583,"tag":57,"props":674,"children":676},{"className":675},[],[677],{"type":158,"value":678},"+x",{"type":158,"value":481},{"data":681,"body":682},{},{"type":580,"children":683},[684],{"type":583,"tag":21,"props":685,"children":686},{},[687,689,694,696,702,704,709,711,717],{"type":158,"value":688},"Используйте ",{"type":583,"tag":57,"props":690,"children":692},{"className":691},[],[693],{"type":158,"value":449},{"type":158,"value":695}," для трассировки, ",{"type":583,"tag":57,"props":697,"children":699},{"className":698},[],[700],{"type":158,"value":701},"bash -n",{"type":158,"value":703}," для синтаксической проверки и добавляйте ",{"type":583,"tag":57,"props":705,"children":707},{"className":706},[],[708],{"type":158,"value":190},{"type":158,"value":710}," для вывода промежуточных значений. Также полезен ",{"type":583,"tag":57,"props":712,"children":714},{"className":713},[],[715],{"type":158,"value":716},"grep -n",{"type":158,"value":718}," для поиска строк кода.",{"data":720,"body":721},{},{"type":580,"children":722},[723],{"type":583,"tag":21,"props":724,"children":725},{},[726,727,732,733,738,740,746,748,753],{"type":158,"value":55},{"type":583,"tag":57,"props":728,"children":730},{"className":729},[],[731],{"type":158,"value":59},{"type":158,"value":593},{"type":583,"tag":57,"props":734,"children":736},{"className":735},[],[737],{"type":158,"value":599},{"type":158,"value":739}," и напишите команду ",{"type":583,"tag":57,"props":741,"children":743},{"className":742},[],[744],{"type":158,"value":745},"echo 'Привет, мир!'",{"type":158,"value":747},". Сделайте файл исполняемым: ",{"type":583,"tag":57,"props":749,"children":751},{"className":750},[],[752],{"type":158,"value":615},{"type":158,"value":481},{"data":755,"body":756},{},{"type":580,"children":757},[758],{"type":583,"tag":21,"props":759,"children":760},{},[761,763,769],{"type":158,"value":762},"Запустите скрипт напрямую: ",{"type":583,"tag":57,"props":764,"children":766},{"className":765},[],[767],{"type":158,"value":768},"./script.sh",{"type":158,"value":770},". Bash интерпретирует shebang и выполнит команды.",{"data":772,"body":773},{},{"type":580,"children":774},[775],{"type":583,"tag":21,"props":776,"children":777},{},[778,780,786,788,794],{"type":158,"value":779},"Присвойте значение переменной: ",{"type":583,"tag":57,"props":781,"children":783},{"className":782},[],[784],{"type":158,"value":785},"name='Alice'",{"type":158,"value":787},", затем выведите её: ",{"type":583,"tag":57,"props":789,"children":791},{"className":790},[],[792],{"type":158,"value":793},"echo \"Привет, $name!\"",{"type":158,"value":795},". Используйте кавычки для многословных значений.",{"data":797,"body":798},{},{"type":580,"children":799},[800],{"type":583,"tag":21,"props":801,"children":802},{},[803,805,811],{"type":158,"value":804},"Добавьте условие с ",{"type":583,"tag":57,"props":806,"children":808},{"className":807},[],[809],{"type":158,"value":810},"if [ \"$var\" = \"value\" ]; then echo \"Найдено\"; else echo \"Не найдено\"; fi",{"type":158,"value":812},". Это позволяет ветвить выполнение.",{"data":814,"body":815},{},{"type":580,"children":816},[817],{"type":583,"tag":21,"props":818,"children":819},{},[820,821,827],{"type":158,"value":688},{"type":583,"tag":57,"props":822,"children":824},{"className":823},[],[825],{"type":158,"value":826},"for i in 1 2 3; do echo \"Итерация $i\"; done",{"type":158,"value":828},", чтобы повторить действия несколько раз.",{"data":830,"body":831},{},{"type":580,"children":832},[833],{"type":583,"tag":21,"props":834,"children":835},{},[836,838,844,846,852],{"type":158,"value":837},"Определите функцию: ",{"type":583,"tag":57,"props":839,"children":841},{"className":840},[],[842],{"type":158,"value":843},"my_func() { echo \"Внутри функции\"; }",{"type":158,"value":845},". Вызовите её: ",{"type":583,"tag":57,"props":847,"children":849},{"className":848},[],[850],{"type":158,"value":851},"my_func",{"type":158,"value":853},". Функции упрощают реиспользование кода.",[]]