Параметры скриптов
Для того, чтобы обеспечить некоторую универсальность, существует возможность при вызове передавать скрипту параметры. В этом случае вызов скрипта будет выглядеть так: , например .
Для того, чтобы получить значение первого параметра, необходимо в скрипте указать , второго — , и т.д. Существует также ряд других переменных, значения которых можно использовать в скрипте: – имя скрипта – количество переданных параметров – PID(идентификатор) процесса, выполняющего скрипт – код завершения предыдущей команды
Создадим файл script1.sh следующего содержания:
Выдадим права на выполнение и выполним скрипт с параметрами:
Мы передали 2 параметра, указывающие город и страну, и использовали их в скрипте, чтобы сформировать строку, выводимую командой printf. Также для вывода в строке Hello использовали имя пользователя из переменной USER.
Для того, чтобы передать значения параметров, состоящие из нескольких слов (содержащие пробелы), нужно заключить их в кавычки:
При этом нужно доработать скрипт, чтобы в команду printf параметры также передавались в кавычках:
Из приведенных примеров видно, что при обращении к переменной для получения её значения используется символ $. Для того, чтобы сохранить значение переменной просто указывается её имя:
File comparisons
You can compare and check for files using the following operators:
-d my_file Checks if its a folder.
-e my_file Checks if the file is available.
-f my_file Checks if its a file.
-r my_file Checks if it’s readable.
my_file –nt my_file2 Checks if my_file is newer than my_file2.
my_file –ot my_file2 Checks if my_file is older than my_file2.
-O my_file Checks if the owner of the file and the logged user match.
-G my_file Checks if the file and the logged user have an identical group.
As they imply, you will never forget them.
Let’s pick one of them and take it as an example:
#!/bin/bash mydir=/home/likegeeks if ; then echo "Directory $mydir exists" cd $mydir ls else echo "NO such file or directory $mydir" fi
We are not going to type every one of them as an example. You just type the comparison between the square brackets as it is and complete your script normally.
There are some other advanced if-then features, but let’s make it in another post.
That’s for now. I hope you enjoy it and keep practicing more and more.
Thank you.
Создать bash скрипт в ОС Linux
Для сочинения бесхитростного script-a на bash, нам понадобится произвести такие обыкновенные процедуры. Создадим в командной строчке Linux бессодержательный файл (именуем его для образца firstscript) и раскроем его на редактирование в любимом текстовом редакторе (vi/vim, nano, gedit и так далее). Для разработки скрипта не понадобится много напряжений, но чтобы набросать сценарий (программу), то понадобится изучать вспомогательную различную литературу. Мы опишем наиболее базу написания скриптов, таким образом приступаем, но если вы не знаете что такое терминал и как им использовать то вам сюда. В самом старте для того чтобы писать bash нам нужно создать каталог для наших скриптов и файл куда мы будем все писать, для этого раскрываем терминал и создаем каталог.
Переключаемся в только-что созданную директорию
И создаем файл
В моем примере я создам скрипт обновления системы, запишу в этот файл. у нас откроется текстовый редактор gedit, я люблю больше vim, но у вас он больше всего не будет общепринят, поэтому показываю на стандартном.
Сделать файл скрипта исполняемым (если он еще таковым не является). Запускать скрипты sh из командной строки легко. Запустить bash скрипт linux.
Запускаем скрипт, просто указав путь до него:
Если скрипт находится в текущей директории, то нужно указать./ перед именем файла скрипта:
Иногда требуются права суперпользователя для запуска скрипта, тогда просто перед скриптом пишем команду sudo:
Можно конечно стартовать script, напрямую предписывая интерпретатор: sh, bash и прочие:
Но не рекомендую так делать постоянно.
Как видите, старт скрипта sh в linux — это достаточно обычная задача, даже если вы еще не плотно ознакомлены с терминалом. Имеется действительно масса скриптов и некоторые из них вам допускается потребуется выполнять. В данной руководстве мы рассмотрели полезные bash скрипты ОС Linux, которые вы сможете применять при использовании ОС Linux. В этой статье мы рассмотрели полезные bash скрипты linux, которые вы можете использовать при работе с системой. Определенные из них состоят из нескольких строчек, немногочисленные помещаются в одну строку. Здесь есть как незначительные сниппеты, которые вы можете применить в своих скриптах, так и полноценные диалоговые скрипты, для работы с ними через консоль.
Команды в bash
Команда в bash — это наименьшая единица кода, которую bash может выполнить. С помощью команд мы сообщаем шеллу, что нам нужно, чтобы он сделал. bash обычно принимает от пользователя одну команду и возвращается к нему после того, как команда будет выполнена. Чтобы немного освоиться в bash, давайте попробуем выполнить несколько простых команд.
Команда echo — возвращает всё, что вы вводите в командной строке:
Пример использования команды echo
Команда date — отображает текущее время и дату:
Пример использования команды date
Команда pwd (сокр. от print working directory») — указывает на текущий рабочий каталог, в котором команды шелла будут искать файлы.
Файловая иерархия в Linux имеет древовидную структуру, поэтому, чтобы добраться до указанного каталога или файла, нам нужно пройти определенный путь, каждый узел которого отделен от других узлов символом .
Пример использования команды pwd
Команда ls (сокр. от list») — отображает содержимое каталога. Обычно, команда начинает с просмотра нашего домашнего каталога. Это означает, что если мы просто напечатаем , то данная команда выведет содержимое текущего каталога, которым в нашем примере является домашний каталог /home/diego:
Пример использования команды ls
Команда cd (сокр. от change directory») — изменяет текущую директорию на заданную пользователем. Рассмотрим некоторые примеры использования данной команды:
— меняет текущую директорию на заданную. Давайте попробуем с помощью команды перейти к корневому каталогу и ознакомимся с его содержимым
Обратите внимание, что мы также можем использовать точку с запятой для записи двух команд в одной строке
Пример объединения двух команд в одной строке
— вернуться в родительский каталог.
— вернуться в домашний каталог.
Команда mkdir (сокр. от make directory») — создает новый каталог.
Команда mv (сокр. от move») — перемещает один или несколько файлов/каталогов из одного места в другое (заданное пользователем). Для этого нужно указать, что мы хотим переместить (т.е. источник), и куда мы хотим переместить (т.е. пункт назначения).
В качестве примера я создам новый каталог Ravesli в своей домашней директории и перемещу в него все .txt-файлы (ну как «все», у меня там только один файл — Адреса.txt) из home/diego/Документы/ с помощью двух вышеприведенных команд:
Перемещение файлов с помощью команды mv
Команда touch — создает новые пустые файлы (а также изменяет временные метки в существующих файлах и каталогах). Вот как мы можем создать пустой файл под названием foo.txt в папке Ravesli из домашнего каталога:
Создание файла с помощью команды touch
Команда rm (сокр. от remove») — удаляет файлы/каталоги. По умолчанию, команда НЕ удаляет каталоги, но если используется как внутри заданного каталога, то каждый подкаталог и файл внутри заданного каталога — удаляются.
Давайте удалим ранее созданный файл foo.txt:
Удаление файла с помощью команды rm
Команда rmdir (сокр. от remove directory») — удаляет каталоги.
Давайте удалим созданный ранее каталог home/diego/Ravesli:
Удаление каталогов с помощью команды rmdir
Команда cat (сокр. от «concatenate») — считывает файл и выводит его содержимое. Она может работать с несколькими файлами, объединяя их вывод в единый поток (отсюда и происходит её название). У меня в домашнем каталоге есть папка untitled с файлами С++/Qt-проекта, и ниже я использую команду для просмотра содержимого файла main.cpp из untitled:
Пример использования команды cat
Чтобы просмотреть несколько файлов, укажите друг за другом (через пробел) имена требуемых файлов после команды , например:
Просмотр нескольких файлов с помощью команды cat
Команда man (сокр. от «manual») — отображает справочные страницы, которые являются руководством пользователя, встроенным по умолчанию во многие дистрибутивы Linux и большинство систем Unix. Например, команда отобразит руководство пользователя, а команда отобразит справку по команде .
Отображение справочной информации с помощью команды man
Using variables
Variables allow you to store information to use it in your script.
You can define two types of variables in your shell script:
- Environment variables
- User variables
Environment variables
Sometimes you need to interact with system variables; you can do this by using environment variables.
#!/bin/bash # display user home echo "Home for the current user is: $HOME"
Notice that we put the $HOME system variable between double quotations, and it prints the home variable correctly.
What if we want to print the dollar sign itself?
echo "I have $1 in my pocket"
Because variable $1 doesn’t exist, it won’t work. So how to overcome that?
You can use the escape character, which is the backslash \ before the dollar sign like this:
echo "I have \$1 in my pocket"
Now it works!!
User variables
Also, you can set and use your custom variables in the script.
You can call user variables in the same way as this:
#!/bin/bash # User variables grade=5 person="Adam" echo "$person is a good boy, he is in grade $grade"
chmod +x myscript ./myscript
Терминал
Итак, начнем с клавиш из настроек терминала. Их можно посмотреть, выполнив команду:♯
А перенастроить, например, так:♯
Ctrl-c – сигнал SIGINT
Первые две комбинации клавиш достаточно важные, и часто «недавно перешедшие с Windows на Linux» НЕправильно их используют: продолжая, как в DOS, для завершения команд использовать комбинацию «Ctrl-z», что неверно. В Linux же для того, чтобы попросить (команде посылается сигнал SIGINT) приложение прервать свою работу, используется .
Ctrl-z – сигнал SIGTSTP
А комбинация используется, чтобы попросить (команде посылается сигнал SIGTSTP) приложение остановить свою работу (не завершая) – «поставить на паузу». Ну, а «разбудить» его можно командой «fg» (или «bg»).
Ctrl-d – EOF(окончание ввода данных)
Далее разберем комбинацию . В выводе «stty -a» эта комбинация значится как «EOF», что означает «окончание ввода данных». Для примера покажу, как можно создать текстовый файл с определенным текстом без использования текстового редактора:
^^^ Здесь видно, что любой набираемый текст перенаправляется в файл /tmp/File.txt, и нет никакой фразы (типа «Горшочек, не вари»), которую бы команда cat восприняла как «окончание ввода» – точнее, для этого как раз и надо нажать .
Также пользуюсь комбинаций для того, чтобы выйти из консоли (например, после того как переключился командой su под другого пользователя или зайдя по ssh на другую машину) – вместо набора команды «exit» или «logout»:
^^^ В правом терминале отображаю историю команд.
…(а внимательный зритель догадается, какой «супер-секретный» пароль у root’а на стенде)
Ctrl-v – ввод следующего символа
Комбинация позволяет вставить в командную строку следующий за ней символ, не воспринимая его как спецсимвол. (Параметр в выводе «stty -a»)
^^^ Здесь для примера показываю, как в скрипте выводить строку текста с использованием табуляции (знаю, что можно использовать \t в команде echo: , но не у всех утилит есть такая возможность, а подобная необходимость вставить «спецсимвол» случается).
^^^ А в этом примере у меня есть файл «New Text Document.txt», созданный в ОС Windows при помощи программы Notepad в директории, которую я затем открыл на доступ по сети и примонтировал в Linux в директорию /mnt. Программа Notepad (в отличии от Notepad++) создает файл в DOS-формате – в конце каждой строки использует дополнительный символ «Возврат каретки». Терминалы часто по умолчанию этот символ не отображают, но он есть, и поэтому, например, команда » не выведет строку, заканчивающуюся на букву «m». Команда cat с опцией «-v» отображает этот символ. А для того, чтобы при выводе заменить или удалить это символ, воспользовался командой tr (хотя можно было бы использовать специальную для этого утилиту unix2dos).
Автодополнение
Tab – автодополнение (в контексте)
Во многих командных интерпретаторах (и в bash в том числе) используется такая возможность, как автодополнение. Как минимум нужно знать, что по нажатию клавиши дописывается название команды. В bash по умолчанию обычно настроено так, что если имеется только один вариант дополнения, то он дописывается по нажатию (также можно использовать и ). Когда вариантов дополнения много, то по первому нажатию дописывается только общая часть (если она есть). А по второму нажатию отображается список всех доступных вариантов. Дальше можно набрать еще символов – уточнить, какое из дополнений нужно, и снова нажать . То же самое с другими дополнениями: имен файлов, имен переменных.
^^^ Здесь, например, смотрю (нажав дважды ), что есть несколько команд, начинающихся с «if», добавив «c» и нажав , получаю набранной команду «ifconfig».
^^^ В этом примере дополняю аргументы команды (здесь имена файлов). Также видно, что в случае, когда вариантов много и все не умещаются в окне терминала, их список отображается утилитой для постраничного просмотра (также при очень большом списке вариантов выдается запрос вида «Display all 125 possibilities? (y or n)» или, как в этом примере, при малом количестве — «—More—».
Дополнения имен пользователей, переменных
Часто, когда дописываются аргументы команд по , дописываются имена файлов. Но стоит также отметить, что, в зависимости от контекста, по дописываются и имена переменных (аргументы, начинающиеся с символа «$»), имена пользователей (аргументы, начинающиеся с символа «~»),…
^^^ Здесь, чтобы набрать «$HISTFILESIZE», вместо 13 символов набрал 8 символов ( ). Помимо того, что так быстрее, это еще и позволяет допускать меньше ошибок при наборе команд, так как не просто печатаю текст, а выбираю из списка установленных переменных.
^^^ Здесь дописываю имена пользователей (фактически пишу адрес домашней директории).
Также bash может дополнять не потому, что набранный текст начинается с определенного символа, а по определенным комбинациям клавиш.
Список того, что может дополнять bash, можно посмотреть командой:
Так, например, видно, что:
-
– покажет список имен пользователей, начинающихся с набранных символов, а дополнить комбинацией ;
-
– список имен машин (согласно /etc/hosts), начинающихся с набранных символов, а дополнить – ;
-
– список имен переменных, заданных в этой сессии (можно их также посмотреть командой set), а дополнить – ;
-
– список команд (согласно доступных: $PATH, alias, функций, встроенных команд), а дополнить – ;
-
– список имен файлов, а дополнить – .
Alt-* – вставить дополнения, Ctrl-x * – развернуть шаблон
(точнее, ) или, что, то же самое, (точнее, , , ), вставит все варианты дополнения в командную строку. Аналогично можно развернуть список файлов, переменных, имен пользователей.
В примерах ниже разворачиваю список файлов:
Вариант с :
Вариант с :
– развернет уже написанный в командной строке шаблон, как в примере ниже:
Планировщик заданий cron
В случае, когда есть необходимость периодического запуска скриптов, полезно использовать планировщик cron, он позволяет задать расписание запуска скрипта и не требует присутствия администратора.
Просмотр заданий пользователя выполняется командой . Для редактирования и создания новых задания используется команда . Строки для запуска команд планировщика в файле конфигурации cron имеют следующий формат:
Где m – минута, h – час, dom – день месяца, mon – месяц, dow – день недели, command – команда, parameters – список параметров. Наглядно этот формат можно представить так:
Например, для того, чтобы в 10 и 30 минут каждого часа каждый день месяца весь год по будням запускать команду, нужно указать следующее:
Более простой пример, каждые 15 минут выполнять команду:
Создадим скрипт для резервного копирования домашней директории пользователя, который будет создавать новый файл бэкапа при каждом запуске:
Поставим скрипт на выполнение каждый день в 22:00, выполнив команду и добавив с помощью открывшегося редактора строку:
Проверить, что задача добавлена в планировщик, можно командой :
В результате каждый день в 22:00 будет создаваться резервная копия домашней директории пользователя (в приведенном примере для демонстрации запуск скрипта выполняется каждую минуту):
Нужно отметить, что директория /tmp в примере использована исключительно для тестов, т.к. она предназначена для хранения временных файлов, и использовать её для хранения резервных копий нельзя. Правильное место размещения бэкапов может подсказать системный администратор.
Как работают bash скрипты в ОС Linux
Это такая командная оболочка, где вы имеете возможность производить разные команды, которые начнут на высокой скорости и плодотворно осуществлять разные работы. Абсолютно вся мощь ОС linux в применении терминала. Поэтому, чтобы не набирать одни и те же команды несколько раз можно использовать скрипты. Это очень удобно, вы просто объединяете несколько команд, которые осуществляют некоторое воздействие, а затем выполняете их одной и той же командой или даже с помощью ярлычка. Для операционной системы linux было создано много скриптов, которые исполняются в разнообразных командных оболочках. Ну в принципе, вы очевидно это уже понимаете.
Операционная система считает исполняемыми только те файлы, которым присвоена характеристика исполняемости. А уже интерпретатор произносит подряд строку за строкой и исполняет все директивы, которые присутствуют в файле. Но если для них поставлен характеристика исполняемости, то для их запуска используется специализированная компьютерная программа — интерпретатор, в частности, оболочка bash. Мы можем запустить его как любую прочую програмку используя терминальный сервер или же выполнить оболочку и сообщить ей какой файл нужно выполнять.
В этом случае не нужно даже флага исполняемости. Взамен подобного, применяются сигнатуры начала файла и специальные флаги. У нас есть несколько различающихся методов произвести включение script-a в ОС Linux. В ОС Linux практически не применяется расширение файла для определения его вида на системном уровне. Это могут делать файловые менеджеры и то не всегда. Операционная система считает исполняемыми только те файлы, которым присвоена характеристика исполняемости. Это обыкновенные файлы, которые содержат в себе текст.
Горячие клавиши Bash
Работа с Bash была бы не такой удобной без горячих клавиш, которые позволяют упростить множество действий. Рассмотрим основные сочетания, некоторые из них вы и так используете каждый день:
- Tab — автодополнение, наберите начало команды или пути и нажмите Tab, если такая команда только одна оболочка ее дополнит. Если доступно несколько вариантов, нажмите два раза Tab чтобы их увидеть;
- Стрелка вверх — предыдущая команда в истории;
- Стрелка вниз — следующая команда в истории;
- Ctrl+R — поиск по истории. Просто нажмите эту кнопку и начните вводить нужную команду;
- Ctrl+G — выйти из режима поиска;
- Alt+. — предыдущее слово последней команды;
- Ctrl+L — очистить вывод терминала;
- Ctrl+A — перейти в начало строки;
- Ctrl+E — в конец строки;
- Ctrl+K — удалить символы начиная от курсора и к концу команды;
- Ctrl+U — удалить символы от курсора до начала команды;
- Ctrl+W — удалить все символы этого слова слева;
- Ctrl+Y — удалить все символы этого слова справа;
- Ctrl+S — остановить вывод на экран;
- Ctrl+Q — возобновить вывод на экран.
Это все основные сочетания клавиш, которые вам понадобятся чтобы пользоваться bash. Конечно, существуют и другие, но эти основные.
Циклы в скриптах
Преимущество программ в том, что мы можем в несколько строчек указать какие действия нужно выполнить несколько раз. Например, возможно написание скриптов на bash, которые состоят всего из нескольких строчек, а выполняются часами, анализируя параметры и выполняя нужные действия.
Первым рассмотрим цикл for. Вот его синтаксис:
for переменная in списокdoкомандаdone
Перебирает весь список, и присваивает по очереди переменной значение из списка, после каждого присваивания выполняет команды, расположенные между do и done.
Например, переберем пять цифр:
Или вы можете перечислить все файлы из текущей директории:
Как вы понимаете, можно не только выводить имена, но и выполнять нужные действия, это очень полезно когда выполняется создание bash скрипта.
Второй цикл, который мы рассмотрим — это цикл while, он выполняется пока команда условия возвращает код 0, успех. Рассмотрим синтаксис:
while команда условиеdoкомандаdone
Рассмотрим пример:
Как видите, все выполняется, команда let просто выполняет указанную математическую операцию, в нашем случае увеличивает значение переменной на единицу.
Хотелось бы отметить еще кое-что. Такие конструкции, как while, for, if рассчитаны на запись в несколько строк, и если вы попытаетесь их записать в одну строку, то получите ошибку. Но тем не менее это возможно, для этого там, где должен быть перевод строки ставьте точку с запятой «;». Например, предыдущий цикл можно было выполнить в виде одной строки:
Все очень просто я пытался не усложнять статью дополнительными терминами и возможностями bash, только самое основное. В некоторых случаях, возможно, вам понадобиться сделать gui для bash скрипта, тогда вы можете использовать такие программы как zenity или kdialog, с помощью них очень удобно выводить сообщения пользователю и даже запрашивать у него информацию.
Переменные в скриптах
Написание скриптов на Bash редко обходится без сохранения временных данных, а значит создания переменных. Без переменных не обходится ни один язык программирования и наш примитивный язык командной оболочки тоже.
Возможно, вы уже раньше встречались с переменными окружения. Так вот, это те же самые переменные и работают они аналогично.
Например, объявим переменную string:
Значение нашей строки в кавычках. Но на самом деле кавычки не всегда нужны. Здесь сохраняется главный принцип bash — пробел — это специальный символ, разделитель, поэтому если не использовать кавычки world уже будет считаться отдельной командой, по той же причине мы не ставим пробелов перед и после знака равно.
Чтобы вывести значение переменной используется символ $. Например:
Модифицируем наш скрипт:
И проверяем:
Bash не различает типов переменных так, как языки высокого уровня, например, С++, вы можете присвоить переменной как число, так и строку. Одинаково все это будет считаться строкой. Оболочка поддерживает только слияние строк, для этого просто запишите имена переменных подряд:
Проверяем:
Обратите внимание, что как я и говорил, кавычки необязательны если в строке нет спецсимволов. Присмотритесь к обоим способам слияния строк, здесь тоже демонстрируется роль кавычек
Если же вам нужны более сложные способы обработки строк или арифметические операции, это не входит в возможности оболочки, для этого используются обычные утилиты.
Команды Bash
Основу работы в Bash составляют команды. Именно с помощью команд вы будете выполнять большинство действий над системой. Команды можно поделить на два типа. Это встроенные в оболочку, которые существуют только виртуально, мы рассматривали их в статье основные команды Bash, а также внешние команды — обычные утилиты или скрипты, расположенные в файловой системе.
Возвращаясь к встроенным командам, можно привести пример, вы не найдете в файловой системе команду cd. Ее нет, она встроена.
Обычные же команды находятся в файловой системе. Они могут находиться в одной из папок, указанных в переменной PATH. Для выполнения встроенной или внешней команды достаточно набрать ее имя, интерпретатор отлично справляется с поиском команд по папкам, указанным в PATH. Например:
Но если команда находится в одной из сторонних папок, то необходимо ввести ее полный адрес:
Иначе оболочка не сможет найти исполняемый файл команды.
Список полезных команд
Список встроенных команд интерпретатора: helpПомощь по команде: <команда> —helpМануал по команде: man <команда>Версия команды: <команда> —versionСписок доступных оболочек: cat /etc/shellsСписок пользователей и их оболочек: cat /etc/passwdТекущая директория: pwdСписок файлов текущей директории: ls -laТекущий пользователь: idПеременные среды: setВерсия ОС: cat /etc/os-releaseВерсия ядра: uname -aПолучить привилегии суперпользователя: sudo su -Установка программы в Debian: apt install mcПосмотреть утилизацию(загрузку): topСвободное место: df -hСколько занимает директория: du -ks /var/logКонфигурация сетевых интерфейсов: ifconfig -aОбъем оперативной памяти: free -mИнформация о блочных устройствах(дисках): lsblkИнформация о процессорах: cat /proc/cpuinfoСписок установленных пакетов: apt list —installedСписок и статус сервисов: service —status-allПерезапуск сервиса: service apache2 restartСкачать файл: wget https://www.gnu.org/graphics/gplv3-with-text-136×68.pngПолучить веб-страницу по URL: curl https://www.google.comПоказать задания планировщика: crontab -lРедактировать задания планировщика: crontab -eВывести новые сообщения в системном логе: tail -f /var/log/syslogПодсчитать количество строк в выводе команды: <команда> | wc -lИзменить права доступа к файлу (разрешить выполнение всем): chmod a+x <файл>Список процессов: ps -efПроверить, запущен ли процесс: ps -ef | grep <процесс>Перейти в предыдущий каталог: cd -Завершить процесс (сигнал kill): kill -9Удаление файла: rm <имя файла>Удаление директории: rm -rf <имя директории>Редактировать файл: nano <имя_файла>Топ 10 процессов по использованию памяти: ps aux | awk ‘{print $6/1024 » MB\t\t» $11}’ | sort -nr | head
Запуск скрипта sh в Linux
Сначала рассмотрим пример небольшого sh скрипта:
Вторая строка — это действие, которое выполняет скрипт, но нас больше всего интересует первая — это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:
Мы разрешаем выполнять запуск sh linux всем категориям пользователей — владельцу, группе файла и остальным. Следующий важный момент — это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:
Или полный путь от корня:
Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ — /usr/local/bin.
Теперь вы можете выполнить:
Это был первый способ вызвать скрипт, но есть еще один — мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:
А если нам нужно запустить скрипт на php, то выполните:
Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:
script.sh &
Даже запустить процесс linux не так сложно.
Объединение команд
Оболочка Bash позволяет не только выполнять команды, но и объединять их в сложные конструкции для получения нужного эффекта. Использование Bash таким способом очень эффективно. Как вы знаете, система Linux создает три потока для каждой программы — поток ввода, поток вывода и поток ошибок. Оболочка позволяет перенаправить поток одной программы прямо в другую с помощью специальных операторов. Читайте более подробно обо всем этом в статье перенаправление ввода вывода в Bash.
Кроме того, Bash позволяет объединять команды по времени выполнения. Существуют такие операторы для объединения команд:
- && — выполнить первую команду, а вторую выполнять только если первая завершится успешно;
- || — выполнить первую команду, а вторую выполнять только если первая завершится неудачей;
- ; — выполняет последовательно каждую следующую команду, как только завершится предыдущая;
- & — запустить команду в фоне и сразу же вернуть управление в командную оболочку для выполнения следующей команды.
Например, сначала выполняем загрузку файла, а затем открываем его в плеере, если загрузка прошла успешно:
Чтобы продолжить этот пример, мы можем удалить загруженный файл, если произошла ошибка:
Чтобы выполнить обновление системы, а затем завершить работу выполните:
И наконец, вы можете запустить какой-либо сервис или приложение, например, браузер в фоне и свободно продолжить работу в терминале:
Переменные и вывод команд
Переменные не были бы настолько полезны, если бы в них невозможно было записать результат выполнения утилит. Для этого используется такой синтаксис:
$(команда)
С помощью этой конструкции вывод команды будет перенаправлен прямо туда, откуда она была вызвана, а не на экран. Например, утилита date возвращает текущую дату. Эти команды эквивалентны:
Понимаете? Напишем скрипт, где будет выводиться hello world и дата:
Теперь вы знаете достаточно о переменных, и готовы создать bash скрипт, но это еще далеко не все. Дальше мы рассмотрим параметры и управляющие конструкции. Напомню, что это все обычные команды bash, и вам необязательно сохранять их в файле, можно выполнять сразу же на ходу.