Как сделать свою команду в linux

Добавил пользователь Morpheus
Обновлено: 10.09.2024

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

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

Основы скриптов

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

Скрипт - это обычный текстовый файл, в котором перечислены обычные команды, которые мы привыкли вводить вручную, а также указанна программа, которая будет их выполнять. Загрузчик, который будет выполнять скрипт не умеет работать с переменными окружения, поэтому ему нужно передать точный путь к программе, которую нужно запустить. А дальше он уже передаст ваш скрипт этой программе и начнется выполнение.

Простейший пример скрипта для командной оболочки Bash:

bash1

Утилита echo выводит строку, переданную ей в параметре на экран. Первая строка особая, она задает программу, которая будет выполнять команды. Вообще говоря, мы можем создать скрипт на любом другом языке программирования и указать нужный интерпретатор, например, на python:

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

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

chmod ugo+x файл_скрипта

Теперь выполняем нашу небольшую первую программу:

bash

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

Переменные в скриптах

Написание скриптов на Bash редко обходится без сохранения временных данных, а значит создания переменных. Без переменных не обходится ни один язык программирования и наш примитивный язык командной оболочки тоже.

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

Например, объявим переменную string:

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

Чтобы вывести значение переменной используется символ $. Например:

Модифицируем наш скрипт:

Bash не различает типов переменных так, как языки высокого уровня, например, С++, вы можете присвоить переменной как число, так и строку. Одинаково все это будет считаться строкой. Оболочка поддерживает только слияние строк, для этого просто запишите имена переменных подряд:

bash2

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

Переменные и вывод команд

Переменные не были бы настолько полезны, если бы в них невозможно было записать результат выполнения утилит. Для этого используется такой синтаксис:

$( команда )

С помощью этой конструкции вывод команды будет перенаправлен прямо туда, откуда она была вызвана, а не на экран. Например, утилита date возвращает текущую дату. Эти команды эквивалентны:

bash3

Понимаете? Напишем скрипт, где будет выводиться hello world и дата:

bash4

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

Параметры скрипта

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

Переменная с именем 1 содержит значение первого параметра, переменная 2, второго и так далее. Этот bash скрипт выведет значение первого параметра:

bash6

bash5

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

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

В Bash для проверки условий есть команда Синтаксис ее такой:

if команда_условие
then
команда
else
команда
fi

Эта команда проверяет код завершения команды условия, и если 0 (успех) то выполняет команду или несколько команд после слова then, если код завершения 1 выполняется блок else, fi означает завершение блока команд.

Но поскольку нам чаще всего нас интересует не код возврата команды, а сравнение строк и чисел, то была введена команда [[, которая позволяет выполнять различные сравнения и выдавать код возврата зависящий от результата сравнения. Ее синтаксис:

[[ параметр1 оператор параметр2 ]]

Для сравнения используются уже привычные нам операторы ,=,!= и т д. Если выражение верно, команда вернет 0, если нет - 1. Вы можете немного протестировать ее поведение в терминале. Код возврата последней команды хранится в переменной $?:

bash7

Теперь объединением все это и получим скрипт с условным выражением:

bash8

bash9

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

Циклы в скриптах

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

Первым рассмотрим цикл for. Вот его синтаксис:

for переменная in список
do
команда
done

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

Например, переберем пять цифр:

bash10

bash11

Или вы можете перечислить все файлы из текущей директории:

for file in $(ls -l); do echo "$file"; done

bash12

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

Второй цикл, который мы рассмотрим - это цикл while, он выполняется пока команда условия возвращает код 0, успех. Рассмотрим синтаксис:

while команда условие
do
команда
done

bash14

bash13

Как видите, все выполняется, команда let просто выполняет указанную математическую операцию, в нашем случае увеличивает значение переменной на единицу.

Хотелось бы отметить еще кое-что. Такие конструкции, как while, for, if рассчитаны на запись в несколько строк, и если вы попытаетесь их записать в одну строку, то получите ошибку. Но тем не менее это возможно, для этого там, где должен быть перевод строки ставьте точку с запятой ";". Например, предыдущий цикл можно было выполнить в виде одной строки:

index=1; while [[ $index

Выводы

Теперь вы понимаете основы создания скрипта в linux и можете написать нужный вам скрипт, например, для резервного копирования. Я пытался рассматривать bash скрипты с нуля. Поэтому далеко не все аспекты были рассмотрены. Возможно, мы еще вернемся к этой теме в одной из следующих статей.

vedro-compota

Например. редактируем файл псевдонимов текущего пользователя:

в отрытый файл добавляем псевдонимы команд в формате (одна команда - одна строка):

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

Затем надо обновить имеющиеся псевдонимы командой (прямо так с точкой):

ну и проверить что они добавились командой:

Чтобы воспользоваться обновлением в другом терминале, его (этот другой терминал) надо перезапустить.

Примеры: ещё примеры, например тут.

Удаление псевдонима

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

и удаляем строку, которая описывает псевдоним, который хотим удалить или заменить на новый
Затем надо обновить имеющиеся псевдонимы командой (прямо так с точкой):


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

Я уже выполняю несколько методов, чтобы запомнить команды Linux.

Мы можем вспомнить забытые команды с помощью команды apropos или закладки часто используемых команд или сохранить важные команды в вашем терминале, чтобы мы могли использовать их по требованию.

Существует много способов

Если вам интересно, как создать скрипт команды Linux, читайте дальше. Это не так сложно, как вы думаете.

Создание скрипта команды Linux

Скажем, мы запускаем следующую команду для сортировки в алфавитном порядке файла с именем ostechnix.txt и отображения вывода в одной строке:

Я не знаю как у вас, но у меня ужасная память.

Независимо от того, сколько раз я запускаю эту команду в день, я в конце концов забуду ее на следующий день или на следующий день после следующего дня.

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

Но я также хотел бы изучить другие альтернативные методы. В

от почему я решил создать скрипт команды Linux.

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

Создайте файл script.sh и поместите в него свою команду.

Или вы можете сделать это как однострочный вариант, как показано ниже:

И затем сделайте скрипт исполняемым. Готово!

Например, я создал скрипт вышеупомянутой длинной команды, как показано ниже.

Сделайте исполняемый файл сценария:

Наконец, выполните следующую команду для выполнения вашей команды Linux:

Довольно легко, не так ли?

Вы можете выбрать легко запоминающееся имя по вашему сценарию.

Вариант использования может отличаться для вас.

Кроме того, вы можете переместить скрипт в свой PATH (пример. / Usr / bin / или любой ваш PATH), поэтому все пользователи могут использовать это без ввода исходного имени пути.

Как создать скрипт последней выполненной команды?

Следовательно, команда будет:

Дважды проверьте свою последнюю команду перед ее запуском.

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


Вопрос: Как отладить/найти изменения или неудачные команды во время процесса загрузки? 1. В процессе загрузки, при появлении загрузочного меню grub нажмите “e” для редактирования grub, затем прокрутите вниз, пока не увидите запись boot: echo "Loading Linux. linux16 /vmlinuz-XXX root=XXXro crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 2. В строке с “linux” удалите следующие записи, если они.

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

Когда вы посещаете официальный сайт LXLE, его мантра – “Оживите старый ПК” – смело бросается в глаза. И это именно то, что LXLE стремится сделать. Основанный на релизе Ubuntu/Lubuntu LTS, LXLE – это легкий дистрибутив Linux, дружественный к ресурсам и идеально подходящий для старых ПК или систем с низкими системными характеристиками. Фактически, LXLE занимает видное.

Мы знаем, что Linux является самой безопасной и надежной операционной системой с открытым исходным кодом. Выбирая Linux для компьютера, мы можем попробовать любые дистрибутивы, которые нам нравятся, такие как Ubuntu, OpenSUSE, Fedora и так далее. Но у ноутбуков есть своя специфика. Многие современные лептопы по своим характеристикам сравнимы с компьютерами, а иногда они превосходят модели.

Часто ли вы набираете длинную команду в командной строке или ищете в истории bash ранее набранную команду? Если ваш ответ на любой из этих вопросов утвердительный, тогда вам пригодятся псевдонимы bash. Псевдонимы Bash позволяют вам установить запоминающуюся команду быстрого доступа для более длинной команды.

Псевдонимы Bash — это, по сути, ярлыки, которые могут избавить вас от необходимости запоминать длинные команды и избавить вас от необходимости печатать, когда вы работаете в командной строке. Например, вы можете установить псевдоним tgz как ярлык для команды tar -xvfz .

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

Создание псевдонимов Bash

Создание псевдонимов в bash очень просто. Синтаксис следующий:

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

Команда ls вероятно, является одной из наиболее часто используемых команд в командной строке Linux. Обычно я использую эту команду с параметром -la чтобы вывести все файлы и каталоги, включая скрытые, в формате длинного списка.

Давайте создадим простой псевдоним bash с именем ll который будет ярлыком для команды ls -la . Для этого откройте окно терминала и введите:

Теперь, если вы введете ll в свой терминал, вы получите тот же результат, что и при вводе ls -la .

Псевдоним ll будет доступен только в текущем сеансе оболочки. Если вы выйдете из сеанса или откроете новый сеанс с другого терминала, псевдоним будет недоступен.

Чтобы псевдоним был постоянным, вам нужно объявить его в файле ~/.bash_profile или ~/.bashrc .

и добавьте свои псевдонимы:

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

После этого сохраните и закройте файл. Сделайте псевдонимы доступными в текущем сеансе, набрав:

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

Если вы хотите сделать свой .bashrc более модульным, вы можете сохранить свои псевдонимы в отдельном файле. Некоторые дистрибутивы, такие как Ubuntu и Debian, включают файл .bash_aliases , источником которого является ~/.bashrc .

Создание псевдонимов Bash с аргументами (функции Bash)

Иногда вам может потребоваться создать псевдоним, принимающий один или несколько аргументов. Вот здесь и пригодятся функции bash.

Синтаксис для создания функции bash очень прост. Они могут быть объявлены в двух разных форматах:

Чтобы просто передать любое количество аргументов функции bash, поместите их сразу после имени функции, разделив пробелом. Передаваемые параметры: $1 , $2 , $3 и т. Д., Соответствующие позиции параметра после имени функции. Переменная $0 зарезервирована для имени функции.

Давайте создадим простую функцию bash, которая создаст каталог, а затем перейдет в него:

Как и в случае с псевдонимами, добавьте функцию в файл ~/.bashrc и запустите source ~/.bash_profile файл source ~/.bash_profile чтобы перезагрузить файл.

Теперь вместо использования mkdir для создания нового каталога, а затем cd для перехода в этот каталог , вы можете просто ввести:

Если вам интересно, что такое -- и && вот краткое объяснение.

  • -- — гарантирует, что вы случайно не передадите команде дополнительный аргумент. Например, если вы попытаетесь создать каталог, который начинается с - (тире), не используя -- имя каталога будет интерпретировано как аргумент команды.
  • && — обеспечивает выполнение второй команды только в случае успешного выполнения первой.

Выводы

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аргументы

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

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

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

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

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

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

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

Способ №1

Способ №2

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

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

if-else

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

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

В предыдущей главе вы могли заметить, что я использовал 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 каждый раз.

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

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

Switch case

Использование if-else конструкции в нашем примере не является оптимальным вариантом. Мы всего лишь сверяем значение переменной с определенным набором значений. В такой ситуации лучшим выбором будет switch-case-конструкция.

Перепишем нашу программу приветствий с использованием switch-case:

Циклы

Как и любой полноценный язык программирования, bash поддерживает циклы. Цикл for и цикл while. Циклы нужны, чтобы выполнять какой-то код заданное число раз. Например, при парсинге CSV перебирать построчно и каждую строку рассматривать отдельно.

Цикл for

Вот пример структуры цикла for:

Простой реальный пример:

Программа просто перебирает все имена, разделенные пробелом, и выводит их с помощью echo.

Попробуем немного усложнить пример:

Создадим файл с именами touch names и запишем в него список имен для приветствия:

Обратите внимание на ^C. Это символ прерывания выполнения программы. В нашем случае мы вызвали программу без аргумента, и она вошла в вечный цикл. Можно сказать, зависла. Пришлось завершить ее принудительно. Не забывайте делать проверки входных данных в реальных программах. Как это делать, можете посмотреть в главах if-else и switch case, например.

В нашей программе есть небольшой баг. Модифицируем файл имен:

Запустим программу, получим вывод:

В итоге мы получим возможность работать со строками целиком. Это пригодится для парсинга CSV.

Обычно цикл for используется со счетчиком. В C-like стиле. Что-то вроде for (i=0;i

Что дальше?

Зарегистрироваться в панели управления

Регистрируйте аккаунт в панели управления Selectel, пополняйте баланс удобным способом и подключайте наши продукты.

Читайте также: