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