Shell script что это
Перейти к содержимому

Shell script что это

  • автор:

Что такое bash / shell

И то, и другое — интерпретаторы командной строки в линуксе. То есть если вы откроете командную строку и введете любую команду, да хоть:

cd /home

То именно интерпретатор ее расшифрует и скажет компьютеру «он хочет перейти в директорию /home». Компьютер ведь не понимает команды на русском / английском языке. Ему нужны байтики. Этим и занимается интерпретатор — переводом с «нашего» на «компьютерный» язык.

Так что «cd /home» — это shell-команда! Или bash. Смотря какой интерпретатор установлен в вашей системе. В каждой операционной системе установлен интерпретатор по умолчанию. У них есть какие-то различия, но есть и набор базовых команд, которые понимают все: cd, mv, cp, ls… (в винде эти команды немного другие)

А что такое shell-скрипт тогда? Это просто текстовый документ, внутри которого написан набор команд! Это не обязательно должны быть «сложные» команды, которые делают что-то супер-навороченное. Это любые команды, которые вы выполняете в консоли.

Например, создадим скриптик, который создаст директорию и в ней файлик:

mkdir /home/test cd /home/test touch test.txt

Так, команды записали, осталось сохранить их в файлик. Скрипты хранят в файлах с расширением .sh, поэтому назовем файл first_script.sh. Но есть нюанс — линуксу плевать на ваше расширение файла. Его может вообще не быть, и все равно скрипт останется скриптом. Почему? Потому что у любого скрипта в первой строке должен содержаться путь к интерпретатору. Например:

#!/bin/bash или #!/bin/sh

Весь файл целиком:

#!/bin/bash mkdir /home/test cd /home/test touch test.txt

И даже если у такого файла не будет расширения вовсе, его можно будет запустить как скрипт:

sh first_script # Проверяем директорию /home — там появилась папка test с файлом test.txt внутри.

Расширение .sh ставится для понимания человеком. Зашел в директорию:

— Ага, что тут у нас? Файлы sh, скрипты какие-то лежат.

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

  1. Остановить сервис.
  2. Переподложить war-файл с приложением (лежат они в директории /opt)
  3. Запустить сервис

Сервиса два, допустим это test и cloud. Так что шагов уже 6.

Когда обновлять вручную надоело, мы положили на все линукс машины простой скриптик:

#!/bin/bash service test stop cp test.war /opt/jboss-test/bin service test start service cloud stop cp cloud.war /opt/jboss-cloud/bin service cloud start

Собираешь приложение, подкладываешь к скриптику и запускаешь 1 команду вместо 6. Удобно! Это называется «автоматизация рутины» =)

Другой пример с того же проекта — мы делали серверное приложение. И во время установки приложения на сервере linux нужно выполнить пункты по настройке самой системы. Например, увеличить параметр max_map_count — сколько максимум памяти может использовать процесс.

Приложение в пике работы требует много памяти. Если не настроить параметр, то «тяжеловесная» задача просто упадет с ошибкой «Не хватает памяти». И если мы видим такую ошибку, то в первую очередь идем проверять настройки системы.

Вообще, если вы отдаете установку приложения на откуп «чужим» админам, лучше потом проверять — а всё ли настроено верно? Конечно, обычно на production (машина, с которой работают реальные пользователи) настраивают всё внимательно, это на тестовых стендах могут что-то пропустить. Но лучше перебдеть!

Мы написали скрипт по проверке настройки окружения (символ «#» в начале строки означает, что это комментарий):

#!/bin/sh # # check sysctl # if [ -f /proc/sys/vm/max_map_count ] && [ $(cat /proc/sys/vm/max_map_count) -ge 16777216 ]; then echo "vm.max_map_count: ok" else echo "vm.max_map_count: failed" fi if [ -f /proc/sys/vm/overcommit_memory ] && [ $(cat /proc/sys/vm/overcommit_memory) -eq 2 ]; then echo "vm.overcommit_memory: ok" else echo "vm.overcommit_memory: failed" fi if [ -f /proc/sys/vm/overcommit_ratio ] && [ $(cat /proc/sys/vm/overcommit_ratio) -eq 100 ]; then echo "vm.overcommit_ratio: ok" else echo "vm.overcommit_ratio: failed" fi if [ -f /proc/sys/vm/swappiness ] && [ $(cat /proc/sys/vm/swappiness) -le 10 ]; then echo "vm.swappiness: ok" else echo "vm.swappiness: failed" fi 

В итоге админы настраивают окружение, а потом мы даем им скрипт, просим запустить его и прислать результаты. Я запустила скрипт на «голой» системе, где, разумеется, параметры настроены не были, и вот ответ:

Видим, что все проверки провалились, статус failed. Если и от админов приходит похожая картина, направляем их в документацию по настройке системы. Если к нам приходят с проблемой падения из-за нехватки памяти, снова просим выполнить скрипт. Так проще локализовать ошибку: это в приложении косяк, или окружение настроено плохо?

Просить других людей выполнить 10 команд не очень хорошо. Потому что часть команд может «потеряться» при выполнении — плохо скопировал, забыл выполнить проверку, которую дали сообщением позже. Гораздо проще сделать 1 скрипт и попросить выполнить именно его.

Когда надо писать скрипт?

  • Когда надо выполнить больше 3 команд за раз — проще выполнить одну, запустить скрипт.
  • Когда одну и ту же команду надо выполнять чаще 3 раз — лучше автоматизировать эту работу.

По сути своей, bash-скрипты — это та же автоматизация. А когда нужна автоматизация? Когда мы хотим избавиться от рутины, от постоянного выполнения одного и того же действия вручную. Повторяете одно и то же каждый день / неделю? Напишите скрипт. Даже если он на 2-3 строчки будет, это правда удобнее. Поверьте, сама делала небольшие скрипты =)

См также по bash:

Основы BASH. Часть 1 (Хабр) — цикл статей о том, как писать скрипты

См также другие статьи из цикла «Что такое. »:

Что такое shell-скрипты в linux и зачем они нужны

Shell Script — это не что иное, как текстовый файл, содержащий ряд команд, которые могут быть выполнены оболочкой или базовой операционной системой. Некоторые из команд, которые вы вводите в командной строке, на самом деле могут быть сценариями оболочки, выполняющими набор других команд более низкого уровня. Также многие программы в Linux используют сценарии оболочки в качестве сценариев запуска.

На файл сценария оболочки должны быть установлены разрешения execute, чтобы пользователь мог выполнить файл. Оболочка считывает команды из сценария и затем выполняет их по порядку. Это практически эквивалентно вводу каждой из этих команд по очереди в командной строке.

Сценарии оболочки обеспечивают определенную простоту и удобство, но также имеют ряд других преимуществ…

Простота использования: Если вам нужно выполнить серию команд, то проще поручить это скрипту. Для выполнения нескольких команд достаточно ввести имя скрипта.

Многократное использование: Когда вы обнаруживаете, что выполняете один и тот же набор команд несколько раз, самое время создать сценарий оболочки. Это позволит вам надежно выполнять их, не допуская ошибок, таких как опечатки и пропущенные команды.

Легче запомнить: легче поддерживать, особенно если вы используете несколько аргументов и опций командной строки. Очень легко пропустить опцию команды или аргумент, если каждый раз вводить их в командную строку.

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

Легче распространять: Если вы распространяете или делитесь программным обеспечением, которое требует выполнения нескольких различных команд для настройки или выполнения, то лучше всего сделать сценарий оболочки. Это намного проще, чем документировать все это. Кроме того, вы можете учесть изменения в окружающей среде с помощью условных операторов. Именно по этой причине многие программы имеют либо конфигурационный, либо стартовый сценарий.

На самом деле нет никаких особых требований к файлу, который должен быть сценарием оболочки. Тем не менее есть ряд моментов, которые отличают его от других файлов

Разрешения файла: Как было отмечено ранее, скрипт или файл должен иметь соответствующие разрешения. Минимальным требованием является наличие у пользователя прав на чтение и выполнение файла.

Действительные команды: Содержимое файла должно быть корректными командами оболочки или операторами, которые исполняющая оболочка может выполнить без ошибок. Между оболочками могут быть некоторые различия в синтаксисе, поэтому ваши команды должны быть корректными для исполняющей оболочки.

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

Имя или расширение файла: Обычно, но не всегда, скрипт заканчивается расширением, и обычно это исполняющая оболочка. Примеры включают такие расширения, как .sh, .ksh или .csh. Это скорее условность, чем требование. Вы можете иметь сценарий вообще без расширения.

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

В заключение приведем краткую пошаговую процедуру создания простого сценария оболочки.

Создайте текстовый файл с помощью вашего любимого текстового редактора. Для этого можно использовать vi, но подойдет и другой текстовый редактор. Мы назовем этот сценарий myhelloworld.sh.

nano myhelloworld.sh

Введите содержимое скрипта, начиная с shebang. Содержимое файла выглядит примерно так:

#!/bin/sh echo "Hello World"

Теперь сохраните файл в папке и измените права доступа к нему, чтобы сделать его исполняемым.

chmod 755 ./myhelloworld.sh

Выполните скрипт, используя путь

./myhelloworld.sh

Теперь скрипт должен вывести на экран текст «Hello World». Теперь вы знаете, как можно добавлять дополнительные команды в сценарий.

Поделиться ссылкой на статью

Shell script

Командная оболочка UNIX (англ. Unix shell , часто просто «шелл» или «sh») — командный интерпретатор, используемый в операционных системах семейства POSIX-совместимые оболочки, восходящие к Bourne shell, появившемуся в Unix Version 7.

Разновидности

  • sh — оригинальный Bourne shell.
  • BSD, имеет Си-образный синтаксис и не является
  • ksh — клон Bourne shell, разработанный Дэвидом Корном из AT&T Labs (отсюда и её название — KornShell).
  • pdksh — открытая (почти целиком является общественным достоянием, отсюда и буквы «pd» — от английского «public domain»)[1] реализация ksh.
  • zsh — другие современные клоны Bourne shell.
  • busybox — современные микро-версии, предназначенные для встраиваемых систем, а также используемые в мини-дистрибутивах.

Программирование

sh является удобным и часто используемым интерпретируемым языком программирования. Он содержит стандартные конструкции для циклов, ветвления, объявления функций и т. п. Данный язык часто используется в скриптов) работы, в частности, сценариев автоматического конфигурирования исходных кодов программ перед их компиляцией. Отличительная особенность языка sh — многие операции, которые в традиционных языках программирования являются встроенными, выполняются с помощью вызова внешних программ.

См. также

Ссылки

ash • sh • csh • dash • es shell • fish • ksh • psh • rsh • Scsh • Sash • rc • Thompson shell • zsh • busybox • прочие…

Wikimedia Foundation . 2010 .

  • Sharp Corporation
  • Shepherdia argentea

Полезное

Смотреть что такое «Shell script» в других словарях:

  • Shell Script — Shell Script, unter Unix eine Datei, die Befehlsaufrufe für die Unix Shell enthält … Universal-Lexikon
  • Shell script — This article is about scripting in UNIX like systems. For batch programming in DOS, OS/2 and Windows, see Batch file. For batch programming in Windows PowerShell shell, see Windows PowerShell#Scripting. A shell script is a script written for the… … Wikipedia
  • shell script — apvalkalo scenarijus statusas T sritis informatika apibrėžtis ↑Tekstinės sąsajos apvalkalo komandų rinkinys (failas). DOS operacinėje sistemoje vadinamas ↑komandų failu. atitikmenys: angl. shell script ryšiai: dar žiūrėk – komandų failas dar… … Enciklopedinis kompiuterijos žodynas
  • shell script — noun A prewritten list of commands, and perhaps other control information, to be executed (interpreted) by a shell or other command interpreter. Syn: batch file … Wiktionary
  • Shell (computing) — A shell is a piece of software that provides an interface for users of an operating system which provides access to the services of a kernel. However, the term is also applied very loosely to applications and may include any software that is… … Wikipedia
  • Shell de UNIX — Este artículo trata sobre el intérprete típico de Unix. Para otros usos de este término, véase terminal (informática) . Pantalla durante una sesión muestra Bash, tomada en Gentoo Linux. Una Shell de Unix o también shell, es el término usado en… … Wikipedia Español
  • script — 1. noun /skrɪpt/ a) Written characters; style of writing. b) Type made in imitation of handwriting. Syn: manuscript, handwriting, cursive … Wiktionary
  • Script (Unix) — script ist ein Kommandozeilenprogramm unter Unix, das alle Ein und Ausgaben eines Terminals in eine Datei aufzeichnet. Benutzung Das Programm wird in der Unix Shell wie folgt benutzt: $ script [file] Weitere Optionen sind möglich. Je nach… … Deutsch Wikipedia
  • Shell sort — is a sorting algorithm that is a generalization of insertion sort, with two observations: *insertion sort is efficient if the input is almost sorted , and *insertion sort is typically inefficient because it moves values just one position at a… … Wikipedia
  • Shell-Skript — Skriptsprachen (häufig auch Scriptsprachen) sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind. Sie verzichten oft auf bestimmte Sprachelemente, deren Nutzen erst bei der Bearbeitung größerer… … Deutsch Wikipedia
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Bash-скрипты: Руководство по Функциям Bash с Примерами

Bash — одна из самых популярных скриптовых оболочек, доступных в Unix. Её полное название звучит как «Bourne Again Shell». Любой пользователь Linux, умеющий работать в командной строке, или системный администратор согласится, что bash и bash-скрипты — мощный инструмент. В этом руководстве мы покажем, как ими пользоваться!

В Unix есть 2 основных типа оболочек.

Bourne shell имеет такие разновидности:

  • Korn shell (ksh)
  • Bourne shell (sh)
  • POSIX shell (sh)
  • Bourne Again shell (bash)

C shell имеет такие вариации:

  • C shell (csh)
  • TENEX (TOPS) C shell (tcsh)

Bash-скрипты являются чрезвычайно мощным и полезным компонентом для разработки. С их помощью можно сократить короткие повторяющиеся задачи к однострочному вызову функции. А многие длинные команды могут быть объединены в один исполняемый код.

Bash доступен практически во всех версиях Linux и не требует отдельной установки. Список доступных оболочек можно проверить, введя следующую команду:

cat /etc/shells

Вывод покажет что-то вроде этого:

/bin/bash /bin/sh /bin/tcsh /bin/csh

Зачем Использовать Функции Bash?

Функция Bash — это по сути набор команд, которые можно вызывать множество раз. Цель функции — помочь вам сделать ваши bash-скрипты более читабельными и избежать повторного написания одного и того же кода. Bash-функции могут:

  • Устранить повторяющиеся задачи
  • Сэкономить время
  • Дать хорошо структурированную, модульную и отформатированную последовательность действий
  • Предоставить возможность задавать динамические значения командам, используя аргументы командной строки
  • Упростить сложные команды, заменив их на один работающий блок
  • Создана единожды, функция может быть запущена неограниченное количество раз.
  • Быть использованы для построения логических потоков
  • Bash-функции могут быть выполнены при запуске сервера или добавлении запланированного cron-задания
  • Команды могут быть отлажены
  • Включать команды, которые вводятся в интерактивном режиме оболочки

Bash, безусловно, отличный инструмент, способный значительно облегчить рабочий процесс. Возможности его использования безграничны, поэтому в этом руководстве мы разберёмся только с основами. Итак, приготовитесь написать ваш первый скрипт!

Bash-скрипты: Подготовка к Работе

Прежде чем мы сможем начать, вам нужно подключиться к VPS-серверу через SSH. Если в процессе у вас возникнут какие-либо вопросы, загляните в это полезное руководство.

Чтобы ознакомится з базовыми опциями bash, вызовите справку:

man bash

В общем-то суть сценариев, или bash-скриптов заключается в том, чтобы записать все повторяющиеся команды в один файл. И вместо того, чтобы постоянно вводит эти команды, начинать их выполнение простым вызовом файла. Таким образом, сначала нам нужно создать файл .sh. Для этого мы будем использовать редактор VIM. Чтобы создать файл, введите следующую команду:

vim primerScripta.sh

Теперь мы перейдём к файлу .sh, где сможем его редактировать.

Чтобы указать, что мы хотим использовать именно оболочку bash, каждый bash-скрипт должен начинаться со строки:

#!/bin/bash

Команда ниже покажет путь к bash-сценарию.

which bash

Как результат этой команды вывод покажет:

/bin/bash

Общий синтаксис bash:

функция имяФункции

Также это можно записать так:

имяФункции ()

Или в одну строку:

имяФункции() < первая команда; вторая команда; >caca

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

sampleFunction ()

$1 означает переменную, которая вставлена ​​в функцию. Bash может создавать динамические переменные внутри команды. Чтобы проверить эту функцию, сделайте следующее:

sampleFunction myDir

Здесь myDir является допустимым именем каталога, который будет создан. Если вы проверите текущий рабочий каталог с помощью команды pwd, то увидите, что вы находитесь в только что созданном myDir.

Точно так же любая часто используемая команда может быть добавлена как функция bash.

Если вы закончили редактировать файл .sh в редакторе VIM, нажмите ESC, чтобы перейти в командный режим, а затем :wq, чтобы сохранить и выйти.

Основные Bash-функции

Ниже показан один из основных примеров функции bash:

#!/bin/bash testfunction() < echo "Моя первая функция" >testfunction

Если вы сохраните этот скрипт в testFunction.sh и выполните его как ./testFunction.sh, в выводе вы увидите:

Моя первая функция

Функция echo выводит результат в консоли. Если вы поменяете местами определение функции с вызовом, появится сообщение об ошибке. Приведённый ниже фрагмент кода выдаст ошибку.

#!/bin/bash testfunction testfunction()

Сначала вам нужно определить функцию, а затем вызвать её.

Функции bash могут принять любое количество параметров. Пример ниже принимает два параметра:

#!/bin/bash testfunction()

testfunction "Hello" "World"

Вы также можете использовать интерактивный ввод и выполнять функции bash. Один из таких примеров показан ниже:

#!/bin/bash addition() < sum=$(($1+$2)) return $sum >read -p "Enter a number: " int1 read -p "Enter a number: " int2 add $int1 $int2 echo "The result is : " $?

В приведённом выше примере значение сложения присваивается в переменной sum, и оно возвращается из функции. Интерактивный ввод осуществляется с использованием read для обоих чисел. Наконец, результат печатается с использованием параметра $?, который хранит возвращаемое значение $sum из функции.

Функции Bash всегда возвращают одно значение.

Вы можете оставить комментарии к файлу, добавив значок #.

  • Цикл while
  • Цикл for
  • Стейтмент if
  • Логическое И
  • Логическое Или
  • Стейтмент else if
  • Оператор case

Ниже приведён пример цикла while.

#!/bin/bash isvalid=true count=1 while [ $isvalid ] do echo $count if [ $count -eq 5 ]; then break fi ((count++)) done

В примере используются операторы while и if. Это выполняет цикл while 5 раз перед выходом после проверки условного оператора if.

1 2 3 4 5

Цикл for может использоваться как для увеличения, так и для уменьшения счетчиков. Один из таких примеров цикла for показан ниже:

#!/bin/bash for (( count=10; count>0; count-- )) do echo -n "$count " done

А вот вывод этого цикла:

10 9 8 7 6 5 4 3 2 1

В Bash && обозначает логическое И, в то время как || представляет логическое ИЛИ.

С помощью операторов If мы также можем определить Else if. Один из таких примеров показан ниже:

#!/bin/bash echo "Enter a valid number" read n if [ $n -eq 101 ]; then echo "This is first number" elif [ $n -eq 510 ]; then echo " This is second number " elif [ $n -eq 999 ]; then echo " This is third number " else echo "No numbers over here" fi

А теперь похожий пример, но с оператором case:

#!/bin/bash echo " Enter a valid number" read n case $n in 101) Echo " This is the first number " ;; 510) echo " This is the second number " ;; 999) echo " This is the third number " ;; *) echo " No numbers over here " ;; esac

В стейтментах case ;; означает конец case.

Итоги

На этом мы завершаем наш обзор основных функций bash. Bash-скрипты — действительно мощный инструмент, и его легко освоить. Это руководство должно стать для вас отправной точкой для изучения возможностей и потенциала Bash. Удачи!

Ольга вже близько восьми років працює менеджером у сфері IT, три з яких вона займається SEO. Написання технічних завдань та інструкцій — один з її основних обов’язків. Її хобі — дізнаватися щось нове і створювати цікаві та корисні статті про сучасні технології, веброзробку, мови програмування, пошукову оптимізацію сайтів та багато іншого.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *