Перейти к содержимому

Как создать sh файл

  • автор:

Чем создать SH?

Рассмотрим основные варианты, с помощью которых можно создать файл формата SH (Bash Shell Script). Зачастую выполнение данной задачи не потребудет каких-либо особых хитростей, просто скачайте GNU Bash (для операционной системы Windows) — интерфейс программы не сложный, да и скачать ее вы можете бесплатно.

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

Программы для создания SH файлов

Чем создать SH в Windows?

Mac

Linux

Общее описание расширения SH

Файл SH является скриптом, запрограммированным для Bash (Bourne-Again Shell), который представляет из себя тип командного процессора Unix и может содержать некоторые функции.

Знаете другие программы, которые могут создать SH? Не смогли разобраться как создать файл? Пишите в комментариях — мы дополним статью и ответим на ваши вопросы.

  • Видео форматы
  • Аудио форматы
  • Электронные книги
  • Текстовые форматы
  • Дисковые образы
  • Табличные данные
  • Растровые изображения
  • Векторные изображения
  • Резервное копирование
  • Raw
  • Сжатые файлы
  • Файлы данных
  • Базы
  • 3D Изображения
  • CAD файлы
  • Файлы разработчиков
  • Зашифрованные файлы
  • Исполняемые форматы
  • Шрифты
  • Файлы игр
  • GIS, карты
  • Другие расширения
  • Форматы макетов
  • Форматы плагинов
  • Файлы настроек
  • Системные файлы
  • Веб форматы

Руководство по написанию скриптов в Linux Bash

Рассказываем, как писать программы на bash с помощью циклов, переменных, управляющих конструкций и аргументов.

Введение

Набор встроенных команд bash (и его аналогов sh, zsh, etc) совместим с любым POSIX-совместимым приложением в Linux, что позволяет встроить в ваш bash-скрипт любое совместимое приложение. Это дает очень большой набор возможностей в сфере автоматизации рутинных задач администрирования систем Linux, деплоя и сборки приложений, различных пакетных обработок, в том числе аудио и видео.

Командная строка — самый мощный пользовательский интерфейс из существующих на данный момент. Базовый уровень знаний получить достаточно просто. Рекомендуется изучить руководство bash. Это можно сделать, выполнив команду man bash.

Суть bash-скриптов — записать все ваши действия в один файл и выполнять их по необходимости.

В этой статье расскажем про написание bash-скриптов с нуля и получим представление, какую пользу можно из них извлечь. Рекомендуем держать под рукой bash-справочник, если вы планируете заняться этим всерьез.

Развертывание среды

Для выполнения скриптов, которые мы будем учиться писать, нужна среда. Если вы используете на своем компьютере систему Linux, вы можете делать все локально. Если Windows, — можете установить WSL/WSL2. Кроме того, вы можете создать виртуальный сервер и подключиться к нему по SSH. Так вы не навредите своему компьютеру если что-то пойдет не так.

Мы выбрали вариант создать виртуальную машину. Залогинимся в личном кабинете https://my.selectel.ru/, нажав на вкладку «Облачная платформа». Там вы сможете создать виртуальный сервер.

Необходимо выбрать зону размещения сервера исходя из его близости к пользователям. Чем дальше сервер, тем выше пинг.

Нажмем Создать сервер.

В разделе Источник убеждаемся, что выбран образ Ubuntu 20.04.

Конфигурацию можно настроить по своим потребностям.

В разделе «Сеть» стоит выбрать «Подсеть — Плавающий IP-адрес».

В разделе «Доступ» загрузите SSH-ключ и не забудьте сохранить root-пароль. Подробнее об этом рассказано в этой статье

Теперь можно создать сервер кнопкой «Создать» в самом низу.

Будет отображена страница статуса сервера, надо дождаться индикации ACTIVE вверху справа.

Теперь на вкладке «Порты» можно посмотреть IP-адрес, присвоенный серверу.

Не копируйте чужой код

Копирование чужого кода на свой компьютер/сервер опасно. Ранее существовал «патч Бармина», представляющий из себя команду rm -rf /*. Ее очень любили давать новичкам Linux на некоторых конференциях в качестве универсального средства от всех проблем. Суть команды — рекурсивное удаление всех каталогов внутри корневого каталога, т. е. всех системных и пользовательских файлов. Сейчас эта команда не сработает во всех актуальных версиях Linux, но раньше она служила злой шуткой и наказанием тем, кто копировал чужие скрипты на свои серверы и выполнял их. Способов навредить серверу/компьютеру все еще достаточно, но они не столь очевидны.

Выбор редактора

Вам потребуется удобный текстовый редактор. Если вы подключаетесь по SSH, то лучшим выбором будут 3 варианта:

  • * vim (если умеете из него выходить)
  • * nano (прост, удобен и надежен)
  • * mcedit (входит в пакет mc, классический двухпанельный консольный файловый менеджер)

Если вы делаете все локально, выбор полностью на вас. Обычный выбор под Linux — gedit. В этой инструкции мы пользовались nano через SSH на удаленном сервере.

Запуск “Hello, World!”

Первая программа, которую обычно пишут программисты это «Hello, World!» — простой вывод этой строки. Мы тоже с этого начнем. За вывод строки в консоль отвечает команда echo. Прямо в консоли вы можете напечатать echo «Hello, World!» и получить соответствующий вывод:

root@geneviev:~ # echo "Hello, World!" Hello, World! 

Сделаем это программой. Команда touch helloworld.sh создаст файл helloworld.sh. Команда nano helloworld.sh откроет этот файл для редактирования. Заполним файл нашей программой:

#!/bin/bash echo "Hello, World!" 

Для выхода с сохранением из nano надо нажать CTRL + O для сохранения (после чего нажать enter для перезаписи текущего открытого файла), а потом CTRL + X для выхода. Можно выходить без сохранения, при этом он спросит, точно ли вы хотите выйти без сохранения. Если да, надо нажать N для выхода без сохранения. Если вы нажмете Y, он спросит куда сохранить измененный файл, можно нажать enter для перезаписи редактируемого файла.

Разберем, что мы написали.

Первой строкой идет #!/bin/bash — фактически это указание на местоположение интерпретатора. Чтобы при запуске скрипта не требовалось указывать отдельно интерпретатор. Убедиться, что ваш bash интерпретатор лежит по этому пути можно через команду which bash:

root@geneviev:~ # which bash /usr/bin/bash 

Второй строкой идет непосредственно вся наша программа. Как она работает, мы разобрали выше, перейдем к выполнению.

Запустить ваш скрипт/команду можно двумя способами.

Способ №1: bash helloworld.sh. Вы вызываете интерпретатор и в аргументе передаете ему имя файла для исполнения.

root@geneviev:~ # bash helloworld.sh Hello, World! 

Способ №2: Сначала надо разрешить системе исполнять скрипт: chmod +x helloworld.sh. Эта команда сделает файл исполняемым. Теперь вы можете запустить его как любой бинарный файл в linux: ./helloworld.sh.

root@geneviev:~ # ./helloworld.sh Hello, World! 

Первая программа готова, она просто выводит строку в консоль.

Аргументы

Это параметры, которые вы можете передать программе при ее вызове. Например, программа ping принимает в качестве обязательного аргумента IP-адрес или DNS-имя, которое требуется пропинговать: ping selectel.ru. Это простой и удобный способ общения пользователя с программой.

Давайте научим нашу программу принимать аргументы и работать с ними. Доступ к аргументам осуществляется через служебную команду $X где X это число. $0 — всегда имя исполняемого скрипта. $1 — первый аргумент, $2 — второй и так далее. Конечно, если вы планируете передавать пару десятков аргументов вашему приложению, это может быть несколько утомительно, так что вам понадобится что-то вроде этого цикла, чтобы перебрать все поступившие аргументы:

for var in "$@"; do echo "$var" done 

Подробнее про циклы будет рассказано в следующих разделах.

Пример, создадим новый файл: touch hellousername.sh. Выдаем права на исполнение chmod +x hellousername.sh.

Открываем nano hellousername.sh

Код примера следующий:

#!/bin/bash echo "Hello, $1!" 

Сохраняем, закрываем. Смотрим, что получилось.

root@geneviev:~ # ./hellousername.sh Vasya Hello, Vasya! 

Программа получилась маленькая, но она учит пользоваться (на самом базовом уровне) аргументами, которые мы в нее можем передать. В данном случае аргумент передается один, Vasya, мы сразу его используем, не делая никаких проверок.

root@geneviev:~ # ./hellousername.sh Hello, ! 

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

Способ №1

#!/bin/bash if [ "$#" -lt 1 ]; then echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya" exit 1 fi echo "Hello, $1!" 

Более подробно конструкцию if then [else] fi мы рассмотрим далее, пока не будем на ней останавливаться. Важно понимать, что тут проверяется. $# Это число аргументов без учета имени скрипта, который всегда $0.

Способ №2

#!/bin/bash if [ -z "$1" ]; then echo "Имя пустое или не передано. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya" exit 1 fi echo "Hello, $1!" 

Здесь тоже используется конструкция if then [else] fi. Ключ -z в if используется для проверки переменной на пустую строку. Есть противоположный ключ -n, он проверяет что строка не пустая. Конечно, этот способ некорректно использовать для проверки входящих аргументов, но в теле самой программы он будет полезен. Например, чтобы проверить что выполненное в самой программе приложение что-то вернуло.

Управляющие конструкции

if-else

Написание программ на любом из языков длиннее нескольких строчек сложно представить без ветвления. В разных языках бывают разные варианты ветвления, но в большинстве случаев используется синтаксис if else. В bash это также присутствует.

Возьмем один из примеров выше.

#!/bin/bash if [ "$#" -lt 1 ]; then echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya" exit 1 fi echo "Hello, $1!" 

Происходит проверка системной переменной $# на то, что она меньше, чем (lower than, -lt) 1. Если это выражение истинно, мы переходим в блок команд, открывающийся ключевым словом then. Весь блок, начинающийся с if, должен завершаться ключевым словом fi. Более сложная структура ветвления может выглядеть примерно так:

if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi 
#!/bin/bash if [ "$#" -lt 1 ]; then echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya" exit 1 fi if [ "$1" = "Vasya" ]; then echo "Whatsupp, Vasiliy?" elif [ "$1" = "Masha" ]; then echo "Hey, Masha" elif [ "$1" = "Michael" ]; then echo "Shalom, Michael" else echo "Hi, $1" fi 
root@geneviev:~ # ./hellousername.sh Vasya Whatsupp, Vasiliy? root@geneviev:~ # ./hellousername.sh Masha Hey, Masha root@geneviev:~ # ./hellousername.sh Michael Shalom, Michael root@geneviev:~ # ./hellousername.sh Andrew Hi, Andrew root@geneviev:~ # ./hellousername.sh Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: ./hellousername.sh Vasya 

Выражение «$1» = «Vasya» проверяет строки на идентичность. Блок после else выполняется только если выше не найден более подходящий блок.

&& и ||

В предыдущей главе вы могли заметить, что я использовал exit 1 для завершения работы программы в случае неуспешной проверки аргумента. Это означает, что программа завершилась с ошибкой. В bash есть операторы && и ||, которые используются для создания цепочек команд. Каждая цепочка зависит от результата выполнения предыдущей программы.

Пример 1: command1 && command2. В этом случае command2 выполнится, только если command1 завершится с кодом 0 (exit 0, по умолчанию).

Пример 2: command1 || command2. В этом случае command2 выполнится, только если command1 завершится с кодом отличным от 0.

Пример 3: command1 && command2 || command3. Если command1 завершится с кодом 0, то будет выполнен command2, иначе command3.

Переменные

Как гласит один из основных принципов программирования — Do Not Repeat Yourself (DRY). Вот и мы не будем повторять себя и перепишем предыдущий пример с использованием переменных, чтобы не вызывать echo каждый раз.

Переменные в bash создаются присваиванием: x=»foo bar» или z=$1. Переменной x мы присвоили строку @foo bar«, а переменной z мы присвоили значение первого аргумента. Использовать именованные переменные гораздо удобнее, чем использовать $1, особенно когда надо использовать его значение во многих местах.

К тому же, аргументы могут идти в разном порядке. Осмысленные названия переменных очень важны, при разрастании программы это снизит неизбежную путаницу. Избегайте имен переменных (и функций) вроде «a», «b», «zzzz», etc.

Чтобы не вызывать echo в каждом варианте с разными строками, разобьем строку на части. Первая часть будет приветствием. Вторая — именем. Третья — завершающим знаком препинания. Его можно не выносить в переменную.

#!/bin/bash greetString="Hello" nameString="stranger" if [ "$#" -lt 1 ]; then echo "Недостаточно аргументов. Пожалуйста, передайте в качестве аргумента имя. Пример: $0 Vasya" exit 1 fi if [ "$1" = "Vasya" ]; then nameString="Vasiliy" greetString="Whatsup" elif [ "$1" = "Masha" ]; then nameString="Maria" elif [ "$1" = "Michael" ]; then greetString="Shalom" nameString="Michael" fi echo "$greetString, $nameString!" 

В этом примере мы создаем переменные greetString и nameString, которым присваиваем значения по умолчанию. В конце программа выводит значения этих двух переменных с помощью echo и форматированной строки (в двойных кавычках переменные раскрываются). Между этими действиями программа определяет, надо ли присваивать переменным другие значения.

Создайте и запустите свой первый скрипт Bash Shell 1 мин для чтения

MSI отдает дань уважения Monster Hunter, предлагая тематическую графику, материнскую плату и монитор

Favorite

Добавить в избранное

Главное меню » Linux » Команды Linux » Создайте и запустите свой первый скрипт Bash Shell

Bash Heredoc

Сделайте первый шаг к созданию сценариев оболочки. Узнайте, что нужно для создания простого bash-скрипта и как его запустить.

Если вам нужно сделать это более одного раза, автоматизируйте это!

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

Автоматизация задачи — один из многих полезных сценариев, в которых вы можете использовать возможности сценариев bash.

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

Создайте и запустите свой первый скрипт оболочки

Давайте сначала создадим новый каталог с именем scripts, который будет содержать все наши скрипты bash.

mkdir scripts cd scripts

Теперь внутри этого «каталога скриптов» создайте новый файл с именем hello.sh с помощью команды cat:

cat > hello.sh

Вставьте в него следующую строку, набрав ее в терминале:

echo 'Hello, World!'

Нажмите Ctrl + D, чтобы сохранить текст в файл и выйти из команды cat.

Вы также можете использовать текстовый редактор на основе терминала, такой как Vim, Emacs или Nano. Если вы используете настольный Linux, вы также можете использовать графический текстовый редактор, такой как Gedit, чтобы добавить текст в этот файл.

Итак, в основном вы используете команду echo для вывода «Hello World». Вы можете использовать эту команду непосредственно в терминале, но в этом тесте вы запустите эту команду через скрипт оболочки.

Теперь сделайте файл hello.sh исполняемым с помощью команды chmod следующим образом:

chmod u+x hello.sh

И наконец, запустите ваш первый скрипт оболочки, добавив hello.sh желаемую оболочку «bash»:

bash hello.sh

Читать Как проверить информацию о зарегистрированном пользователе с помощью команды Who

Вы увидите Hello, World!, напечатанные на экране. Возможно, это была самая легкая программа Hello World, которую вы когда-либо писали, верно?

Конвертируйте ваш скрипт в bash

Bash означает “Bourne-Again shell”, — это всего лишь одна из многих доступных оболочек в Linux.

Оболочка — это интерпретатор командной строки, который принимает и запускает команды. Если вы когда-либо запускали какую-либо команду Linux раньше, то вы использовали оболочку. Когда вы открываете терминал в Linux, вы уже используете оболочку по умолчанию вашей системы.

Bash часто является оболочкой по умолчанию в большинстве дистрибутивов Linux. Вот почему bash часто является синонимом оболочки.

Сценарии оболочки часто имеют почти одинаковые синтаксисы, но иногда они также различаются. Например, индекс массива начинается с 1 в Zsh вместо 0 в bash. Скрипт, написанный для оболочки Zsh , не будет работать так же в bash, если у него есть массивы.

Чтобы избежать неприятных сюрпризов, вы должны сообщить интерпретатору, что ваш сценарий оболочки написан для оболочки bash.

Строка SheBang в начале сценария оболочки

Строка «#!/Bin/bash» называется строкой shebang, а в некоторых литературах она называется строкой hashbang, и это потому, что она начинается с двух символов хеша «#» и bang «!».

#! /bin/bash echo 'Hello, World!'

Когда вы добавляете строку «#!/Bin/bash» в самом верху вашего скрипта, система знает, что вы хотите использовать bash в качестве интерпретатора для вашего скрипта. Таким образом, вы можете запустить скрипт hello.sh прямо сейчас, не добавляя ему bash.

Добавление сценария оболочки в PATH (чтобы его можно было запустить из любого каталога)

Возможно, вы заметили, что мы использовали ./hello.sh для запуска скрипта; вы получите ошибку, если пропустите ведущий ./

destroyer@andreyex:~/scripts$ hello.sh hello.sh: command not found

Читать Временные метки файлов в Linux: atime, mtime, ctime. Разъяснения

Bash подумал, что вы пытаетесь запустить команду с именем hello.sh. Когда вы запускаете любую команду на вашем терминале; он ищет эту команду в наборе каталогов, которые хранятся в переменной PATH.

Вы можете использовать echo для просмотра содержимого этой переменной PATH:

echo $PATH /home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Символ двоеточия (:) разделяет путь каждого из каталогов, которые сканирует ваша оболочка при каждом запуске команды.

Команды Linux, такие как echo, cat и т. д., можно запускать откуда угодно, потому что их исполняемые файлы хранятся в каталогах bin. Каталоги bin включены в PATH. Когда вы запускаете команду, ваша система проверяет PATH на все возможные места, которые она должна искать, чтобы найти исполняемый файл для этой команды.

Если вы хотите запустить свой bash-скрипт из любой точки мира, как если бы это была обычная команда Linux, добавьте местоположение вашего сценария оболочки в переменную PATH.

Во-первых, найдите местоположение каталога вашего скрипта (если вы находитесь в том же каталоге), используйте команду PWD:

Используйте команду export, чтобы добавить каталог скриптов в переменную PATH.

export PATH=$PATH:/home/user/scripts

Обратите внимание, что мы добавили «каталог скриптов» в самый конец нашей переменной PATH. Так что пользовательский путь ищется после стандартных каталогов.

Момент истины здесь, запустите hello.sh:

destroyer@andreyex:~/scripts$ hello.sh Hello, World!

Он работает! Это подводит нас к концу этой статьи. Мы надеемся, что теперь у вас есть некоторое представление о сценариях оболочки.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Урок #11 – Bash Shell скрипты

Урок #11 – Bash Shell скрипты

Bash скрипт – это файл, что описывает различные команды относительно операционной системы. За счет такого файла вы можете выполнить автоматизацию работы. За урок мы научимся создавать Bash Shell скрипты и выполнять действия благодаря им.

Видеоурок

Bash скрипт – файл, что содержит список команд для выполнения в ОС Линукс. При помощи Bash скрипта вы можете выполнять управление вашей операционной системой. Сам же Bash Shell является усовершенствованной вариацией командного терминала.

Простой пример

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

Создание Bash скрипта

Для создания скрипта вы можете использовать любой текстовый редактор. Наиболее удобный вариант это использовать текстовый редактор «nano» или же «gedit».

При создании скрипта обязательно добавьте ему расширением «.sh».

Для выполнения скрипта обратитесь к нему через команду «bash»:

bash script.sh

Возможности Bash Shell скриптов

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

Помимо стандартных команды вы также можете создавать переменные, получать данные от пользователя, указывать передаваемые параметры и создавать условия, циклы, функции.

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

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

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