19 полезных shell-скриптов на все случаи жизни

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

Несколько способов ускорить bash-скрипты

Для написания простого скрипта на bash, нам потребуется выполнить следующие простые действия:

    Создадим в командной строке Linux пустой файл (назовем его для примера firstscript) и откроем его на редактирование в любимом текстовом редакторе (vi/vim, nano, gedit и т.д.):
  1. Скопируем/вставим или просто наберем вручную следующий текст:
  2. Выйдем из текстового редактора с сохранением созданного файла.
  3. Сделаем наш скрипт исполняемым, чтобы в дальнейшем мы его могли без проблем запускать из командной строки, выполнив команду:
  4. Попробуем запустить созданный нами скрипт, выполнив в командной строке: И, вот результат:

Как это все работает:

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

вторая строка создает каталог testdir

третья строка позволяет перейти в созданный каталог testdir

команда touch в следующей строке создает три файла

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

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

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

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

, перенаправление

#!/bin/bash # Любой shell-скрипт всегда начинается со строчки #!/bin/bash (или #!/bin/sh) # Комментарии всегда начинаются со знака # # Для того, чтоб вывести на экран сообщение, используем команду ECHO echo "hello, world" # а это пример форматированного вывода…

почти как в Си printf "форматированный вывод десять=%d строка=%s float=%f шестнадцатиричное_число=0x%X\n" 10 "строка" 234 # пример чтения ввода с клавиатуры read A echo $A printf " вы только что ввели слово: %s\n" "$A" #перенаправление, конвейеры, получение результата вывода другой программы # пример генерации пароля из 10 букв PASSWORD1=`cat /dev/urandom | tr -d -c ‘a-zA-Z0-9’ | fold -w 10 | head -1` echo Password=$PASSWORD1 #кавычки вида « дают результат вывода на экран того, что внутри них (т.е. выполняется #программа или скрипт, написанные внутри таких кавычек и результат, выводимый ими на #стандартный вывод является результатом операции "обратные кавычки" #в данном случае результатом является вывод конвейера из нескольких программ.

Читайте также:  Apple Watch не обновляются: что делать и какие есть варианты решения?

Интересные bash скрипты для любителей терминала в Linux

#операция | обозначает конвейер. Т.е. в нашем примере: #cat /dev/urandom выводит на содержимое файла /dev/urandom ( для генерации ) #tr осуществляет трансляцию,т.е. заменяет одни байты другими (это нужно, чтоб избежать появления в пароле непе- #чатаемых символов) #fold разбивает то, что ей пришло на на строки длиной 10 символов и выводит это на #head -1 выводит первую строчку того, что ей пришло на стандартный ввод. # или так: PASSWORD2=`cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c10` echo Password=$PASSWORD2

действия, циклы по кол-ву раз

#!/bin/bash A="10" B="5" C=`expr $A + $B` printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C" # пример цикла по i I=0 while [ $I -lt 15 ] do printf "0x%02x " "$I" I=`expr $I + 1` done echo

рода проверки

#!/bin/bash # пример проверки существования файла # создаем файл test1 touch test1 # проверяем существование файла test1 if [ -f test1 ] ; then echo "файл test1 существует" fi # проверяем несуществование файла test2 if ! [ -f test2 ] ; then echo "файл test2 не существует" fi # краткая справка по другим опциям команды [ ] # -d filename директория существует # -f filename файл существует # -L filename символьная ссылка существует # -r, -w, -x файл доступен для чтения, записи или выполнения # -s filename файл существует и имеет ненулевую длину # f1 -nt f2 f1 новее чем f2 # f1 -ot f2 f1 старше чем f2

Метки: bash, freebsd, shell

Написать комментарий через:

Запуск script bash

Чтобы лучше понять, как работать со скриптами, стоит рассмотреть несложный пример. Допустим, необходимо запустить script bash. Для этого, создам файл «», с помощью редактора nano.

$ nano

Внутри файла пишем следующий код:

#!/bin/bash

echo «Primer vypolneniya scripta»

В представленном примере первая строка – это та самая оболочка, посредством которой выполняется определенное действие. Само действие в данном случае указано во второй строке. Примечательно, что у данного варианта могут быть альтернативные окончания. Например:

  • /bin/sh — bash script.
  • /usr/bin/php — php scpript.
  • /usr/bin/python — язык python.

Далее необходимо сохранить файл. Согласно нашему примеру нажимаем «ctrl + O», затем «ctrl + X».

Чтобы script bash отработал, необходимо дать файлу специальные права на исполнение.

$ chmod ugo+x

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

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

$

А вот указание полного пути. Он будет выглядеть следующим образом:

$ /root/

Запуск через оболочку bash

Далее мы рассмотрим альтернативный способ запуска script, используя для этих целей оболочку. Пользователь может сразу передать ей нужный скрипт для выполнения. Такое не часто встречается на практике в случае с bash, чего не скажешь о скриптах python и php. Как запустить скрипт указанным способом:

Читайте также:  Используем iptables для защиты сервера от DDOS и Flood

$ bash

Предлагаем вашему вниманию еще один аналогичный способ запуска:

$ php

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

&

Заключение

Знакомство новичка с терминалом Linux часто приводит к некоторым сложностям.  Разобравшись в том, как происходит управление устройством, данная проблема быстро пропадает. Данная статья лишь подтверждает это. Запускать script в Линукс действительно легко.

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

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

$ curl

Эта простая команда покажет тебе внешний IP — идеальный вариант, если в Сеть ты ходишь через роутер. Все, что она делает, — просто обращается к серверу , который возвращает обратно IP-шник одной строкой вместо полноценной веб-страницы.

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

#!/bin/bash curl

Далее скрипт сохраняем в каталог ~/bin и назначаем права на исполнение:

$ chmod +x ~/bin/

Теперь его можно вызывать из командной строки командой

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

Идем дальше.

#!/bin/sh curl -4

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

Сводка погоды в консолиДругие статьи в выпуске: Xakep #212. Секреты даркнета

  • Содержание выпуска
  • Подписка на «Хакер»

#!/bin/sh dig +short txt $

А так можно получить краткое описание чего-либо в Википедии, причем с помощью DNS-запроса вместо обращения к веб-серверу. Кстати, веб-сервер через командную строку тоже очень легко создать:

#!/bin/sh while ( nc -l 80 < > : ) ; do : ; done

Данный скрипт основан на утилите netcat (nc), которую называют швейцарским армейским ножом для сетевых операций. Скрипт запускает цикл, выполняющий команду nc, которая слушает 80-й порт и в ответ на запрос отдает , отправляя переданный запрос в никуда (символ означает noop, то есть пустую операцию).

С помощью простых скриптов и команд можно запросто слушать интернет-радио:

#!/bin/sh mpv —volume=50 -playlist ~/_

Естественно, плей-лист в формате M3U необходимо заранее скачать с сайта радиостанции. Кстати, если запустить MPlayer с аргументом —input-ipc-server=/tmp/mpvsocket, им можно будет управлять, записывая команды в файл. Например, настроить громкость:

echo ‘volume +10’ | socat — /tmp/mpvsocket

Создай два скрипта: один для запуска, другой для остановки радио (со строкой killall mpv), повесь их на рабочий стол и настрой горячие клавиши DE на управление воспроизведением. Вуаля, у тебя готов плеер для интернет-радио, запустить который можно, просто кликнув по иконке на рабочем столе. И он почти не будет расходовать память или занимать трей.

Но отвлечемся от сетевых операций и вернемся к локальным делам.

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

#!/bin/sh tar -czf «../${PWD##*/}» .

Это один из моих любимых скриптов. Он создает архив текущего каталога. Особого внимания здесь заслуживает конструкция ${PWD##*/}, которая берет полный путь до текущего каталога (переменная $PWD) и удаляет из него первую часть вплоть до последнего слеша, оставляя, таким образом, только имя самого каталога. Далее к нему добавляется расширение Более подробно о таких конструкциях ты можешь прочитать в man bash.

Читайте также:  Повышаем пользовательские привилегии в Linux

#!/bin/sh while true; do inotifywait -r -e MODIFY КАТАЛОГ && ТВОЯ_КОМАНДА done

А это уже скрипт, который запускает команду в ответ на изменение файлов в каталоге. Ее можно использовать для множества разных целей, например для автоматического включения плеера при сохранении MP3-файла. Или просто выводить уведомление на десктоп, используя в качестве команды notify-send:

notify-send «Файл изменен»

Как работать с Bash

Рассмотрим, как пользоваться Bash на примере подключения к веб-серверу (где находятся файлы сайта) с установленным дистрибутивом Linux через протокол SSH с нуля.

Для этого можно воспользоваться любым предпочитаемым способом. В данном случае рассматривается веб-сервер с Ubuntu, хотя в других дистрибутивах принцип остается тем же.

1. После успешного ввода логина и пароля программа Терминал Linux в автоматическом режиме запустит Bash. Собственно, пользователь уже подключится к системе и увидит приглашение на ввод команд.

2. Приглашение отображается относительно стандартно и имеет следующий вид:

<имя пользователя>@<имя компьютера>:<текущий каталог><знак>.

В примере:

  • размытием закрыто имя пользователя;
  • «vPro» – название компьютера;
  • графема тильда (~) в Линуксе обозначает домашнюю папку пользователя в сокращенном виде (/home/user). Она в Bash по умолчанию является текущей
  • знак доллара ($) указывает, что пользователь не имеет прав администратора. Работая как администратор, вместо знака доллара отображается знак решетки (#).

3. Когда приглашение выполнено, терминал автоматически поставит пробел и будет находиться в ожидании ввода команд. На предложенном изображении была нажата кнопка «Enter». В следующей строчке введена команда «cd» перейти в существующий каталог «/opt». Еще ниже отображается результат вывода – рабочей папкой стала «/opt» и это показано в приглашении.

Как работать с Bash

4. Командная строка Linux позволит запускать любое установленное в системе приложение. Как правило, каталоги со списком исполняемых программ расположены в папках «/bin, /usr/bin». Проверяемые каталоги интерпретатор сохраняет в переменной «$PATH». Просмотреть их список можно командой:

echo $PATH

5. Далее можно воспользоваться командой «ls» и добавить к ней один из каталогов, найденных в «$PATH», чтобы увидеть список доступных программ. Например:

6. Если приложение консольное, Bash произведет его запуск в терминале. Ниже показан пример запуска редактора Nano.

7. Bash также позволяет осуществлять запуск приложений в фоновом режиме. Для запуска в фоне, после ввода названия программы в конце следует добавить знак амперсанда (&).

Здесь строка «[2] 23258» – это номер и PID процесса. При этом nano находится в фоновом режиме. Вернуться к нему можно командой «fg» (добавив номер задачи, если их запущено несколько) или «jobs».

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