Android/iOS

Подборка shell-скриптов на все случаи жизни. Как создать собственный script (скрипт-сценарий) в Linux Пишем скрипт и выбираем для него имя

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

Возможно пойти еще дальше и распланировать машинальное выполнение script-a. В случае, если вы уже более опытный user, то, скорее всего, довольно часто проделываете разные цели через terminal. Это только пример и таких действий очень много, даже взять резервное копирование и загрузку скопированных файлов на удаленный сервер. Зачастую встречаются задачи, для которых нужно выполнять несколько команд по очереди, например, для обновления системы необходимо сначала выполнить обновление репозиториев, а уже затем скачать новые версии пакетов.

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

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

В этом случае не нужно даже флага исполняемости. Взамен подобного, применяются сигнатуры начала файла и специальные флаги. У нас есть несколько различающихся методов произвести включение script-a в ОС Linux. В ОС Linux практически не применяется расширение файла для определения его вида на системном уровне. Это могут делать файловые менеджеры и то не всегда. Операционная система считает исполняемыми только те файлы, которым присвоена характеристика исполняемости. Это обыкновенные файлы, которые содержат в себе текст.

Bash скрипты Linux для чайников

Конструкцию bash допускается описать в 7 обязательствах подобным типом: «вызов командного интерпретатора - тело bash скрипта - окончание скрипта». Сочиняются скрипты с поддержкой различного текстового редактора, хранятся они как текстовые компьютерные данные. Но, чтобы было комфортнее, я храню их в совокупности с расширением «*.sh». Но давайте поглядим на все это на образце определенной цели. Есть использование, которое нужно запускать с достаточно большим комплектом характеристик. Стартовать потребуется зачастую, а каждый раз вводить эти характеристики лень. Чтоб являлось определеннее, поглядим, как выглядит это воздействие:

/home/Admin/soft/sgconf/sgconf -s 10.10.10.1 -p 5555 -a Admin -w 112233 -u user -c 100

Для этого script-a давайте использовать интерпретатор bash. Первостепенным процессом нам с вами необходим вызов интерпретатора. Открываем текстовый редактор и пишем код.

Добавим эту операцию с учетом введенных переменных:

/home/Admin/soft/sgconf/sgconf -s 10.10.10.1 -p 5555 -a Admin -w 112233 -u $user -c $cash

Текст, который будем вносить в логи будет таким:text=»Баланс пользователя «user» пополнен на «cash» рублей в time»

Аргумент text варьируется в связи от переменных user, cash и time

if [ -e /home/Admin/scripts/sgconf/sgconf.log] then echo text >> /home/Admin/scripts/sgconf/sgconf.log else echo text > /home/Admin/scripts/sgconf/sgconf.logfi

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

Создать bash скрипт в ОС Linux

Для сочинения бесхитростного script-a на bash, нам понадобится произвести такие обыкновенные процедуры. Создадим в командной строчке Linux бессодержательный файл (именуем его для образца firstscript) и раскроем его на редактирование в любимом текстовом редакторе (vi/vim, nano, gedit и так далее). Для разработки скрипта не понадобится много напряжений, но чтобы набросать сценарий (программу), то понадобится изучать вспомогательную различную литературу. Мы опишем наиболее базу написания скриптов, таким образом приступаем, но если вы не знаете что такое терминал и как им использовать то вам сюда. В самом старте для того чтобы писать bash нам нужно создать каталог для наших скриптов и файл куда мы будем все писать, для этого раскрываем терминал и создаем каталог.

Переключаемся в только-что созданную директорию

И создаем файл

sudo gedit script.sh

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

sudo apt update;sudo apt full-upgrade;

Сделать файл скрипта исполняемым (если он еще таковым не является). Запускать скрипты sh из командной строки легко. Запустить bash скрипт linux.

chmod +x script.sh

Запускаем скрипт, просто указав путь до него:

path/to/script.sh

Если скрипт находится в текущей директории, то нужно указать./ перед именем файла скрипта:

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

sudo./script.shsudo path/to/script.sh

Можно конечно стартовать script, напрямую предписывая интерпретатор: sh, bash и прочие:

bash script.shsh path/to/script.sh

Как видите, старт скрипта sh в linux — это достаточно обычная задача, даже если вы еще не плотно ознакомлены с терминалом. Имеется действительно масса скриптов и некоторые из них вам допускается потребуется выполнять. В данной руководстве мы рассмотрели полезные bash скрипты ОС Linux, которые вы сможете применять при использовании ОС Linux. В этой статье мы рассмотрели полезные bash скрипты linux, которые вы можете использовать при работе с системой. Определенные из них состоят из нескольких строчек, немногочисленные помещаются в одну строку. Здесь есть как незначительные сниппеты, которые вы можете применить в своих скриптах, так и полноценные диалоговые скрипты, для работы с ними через консоль.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.Ввод-вывод, перенаправление

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

почти как в Си printf "форматированный вывод десять=%d строка=%s float=%f шестнадцатиричное_число=0x%X\n" 10 "строка" 11.56 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 #кавычки вида « дают результат вывода на экран того, что внутри них (т.е. выполняется #программа или скрипт, написанные внутри таких кавычек и результат, выводимый ими на #стандартный вывод является результатом операции "обратные кавычки" #в данном случае результатом является вывод конвейера из нескольких программ.

Интересные 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

2.Арифметические действия, циклы по кол-ву раз

#!/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

3.Разного рода проверки

#!/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

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

Как написать простой скрипт на bash

Как запустить последовательно несколько команд в или все сразу? Если вам нужно запустить несколько команд, то между ними ставится символ «; » называемый метасимвол (metacharacter).Синтаксис следующий command1;command2;command3

Команды, разделенные знаком «; » выполняются последовательно. Shell ждет следующей команды, и возвращение в приглашение командной строки происходит после исполнения последней команды.

Одновременное выполнение нескольких команд

Для запуска нескольких команд за один раз, поставив амперсанд «&» в конце из команды. Для примера рассмотрим начало скрипта резервного копирования:

# /root/ftpbackup.sh &

И ваш терминал свободен для дальнейшего пользования, вам не нужно ждать окончания исполнения скрипта /root/ftpbackup.sh!

Использование всего вместе

У вас может быть тысячи файлов *.bak. Но вам нужно всего-навсего перечислить нужные категории, и поместить все в /tmp/list:

# for d in «/home/sales /home/dbs /data1»; do find $d -iname “*.bak” >> /tmp/list; done &

Источник

Изучаем BASH (Основы)

Дата:2012-12-10

Учимся писать сценарии

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

Давайте создадим наш первый сценарий.
Для этого просто откроем текстовый редактор и наполним файл следующим:

#!/bin/bash
who; date

Здесь все просто.
По своей сути знак диеза (#), в большинстве случаев, рассматривается как начало комментария, однако здесь начиная с первой строки он говорит нам, что должен использоваться интерпретатор bash.

1) Необходимо дать права на выполнение

chmod u+x bash1.sh

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/game

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

Здесь мы рассмотрели то как создается сценарий, дальше нужно уяснить несколько вещей.

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

Переменные

Для определения новой переменной достаточно сказать:

#!/bin/bash
F=Ivan
I=Ivanov
O=Ivanich
#Выводится с помощью:
echo «FIO $F $I $O»

Результат

sh bash2.sh
FIO Ivan Ivanov Ivanich

Посмотреть переменные;
# set

BASH=/bin/bash
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/root
SSH_CLIENT=’192.168.200.3 9382 22′
SSH_CONNECTION=’192.168.200.3 9382 192.168.200.252 22′

Существует еще один очень интересный и полезный способ задания переменной при помощи ` `

#!/bin/bash
day=`date +%y%m%d`
# В дальнейшем переменную $day можно вставить в скрипт, например бэкапа

rsync -avz /root/data /root/backup.$day

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

Перенаправление ввода и вывода.

> Перенаправление в файл с полным затираем содержимого файла
>> Перенаправление с добавлением в файл, к концу уже имеющегося содержимого.
ls -al / > 123
А команда:
ls -al /home >> 123
Выведет список всех файлов из корня и затем добавит после этого содержимое каталога Home
такое перенаправление называется перенаправление вывода
Перенаправление ввода — содержимое перенаправляется в команду.
sort < sort.txt
Команды сорт производит сортировку по алфавиту в результате чего, хаотично наполненный файл sort.txt после перенаправления в программу sort будет отсортирован по алфавиту
sort < sort.txt | more — а построение в канал отобразит отсортированные данные постранично
sort < sort.txt | grep s | more — отсортирует и выведет все со знаком «S»

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

cat /var/log/maillog | grep blocked | more

1) cat — выводит на экран весь лог файл
2) дальше этот лог файл передается на обработку команде grep которая выводит только с Blocked, но так как сообщений с этим статусом много необходимо передать ее команде more
3) more — необходима для постраничного просмотра данных

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

Математические вычисления

Математические вычисления в Linux легче всего выполнять при помощи команды bc
При этом неследует задать количество знаков после плаваюшей запятой при помощи scale

#!/bin/bash
var1=45
var2=22
var3=`echo «scale=3; $var1/$var2» | bc`
echo $var3

Plutonit.ru — Администрирование, настройка Linux и Windows 2009 — 2018

Ошибка базы данных: Table ‘a111530_forumnew.rlf1_users’ doesn’t exist

На главную -> MyLDP -> Электронные книги по ОС Linux

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

Пишем скрипт и выбираем для него имя

Скрипт командной оболочки представляет собой последовательность команд, которую вы можете использовать многократно. Исполнение этой последовательности, как правило, осуществляется с помощью ввода в командной строке имени скрипта. Кроме того, с помощью cron вы можете использовать скрипты для автоматизации выполнения задач. Другое применение скриптов — процедура загрузки и остановки системы UNIX, когда в скриптах init определяются операции с демонами и сервисами.

Чтобы создать скрипт командной оболочки, откройте в вашем редакторе новый пустой файл. Для этого можно использовать любой текстовый редактор: vim , emacs , gedit , dtpad и т. д.; подойдет любой. Однако, вы можете выбрать более продвинутый редактор, такой как vim или emacs , поскольку такие редакторы можно настроить на распознавание синтаксиса командной оболочки и Bash и они могут оказаться хорошим подспорьем по предотвращению таких ошибок, которые часто делают новички, например, забывают закрывать скобки и ставить точки с запятой.

Набирайте команды UNIX в новом пустом файле точно также, как если бы вы вводили их в командной строке. Как уже говорилось в предыдущей главе (смотрите раздел «Выполнение команды»), команды могут быть функциями командной оболочки, встроенными командами, командами UNIX или другими скриптами.

Выберите для вашего скрипта мнемоничное имя, которое бы говорило, что скрипт делает. Убедитесь, что имя вашего скрипта не конфликтует с существующими командами. Чтобы не возникало никакой путаницы, имена скриптов часто заканчиваются расширением.sh. Тем не менее, в вашей системе могут существовать и другие скрипты с тем же именем, которое вы выбрали. С помощью команд which , whereis и других поищите информацию об уже существующих программах и файлах в таким именем:

which -a script_name whereis script_name locate script_name (прим.пер.

Пишем скрипты в Linux (обучение на примерах)

: вместо укажите имя своего скрипта).

Скрипт script1.sh

В этом примере мы используем команду echo , встроенную в Bash, которая перед тем, как будут выданы выходные данные, проинформирует пользователя о том, что должно быть сделано. Настоятельно рекомендуется информировать пользователей о том, что делает скрипт с тем, чтобы пользователи не нервничали в случае, если им покажется, что скрипт ничего не делает . Мы вернемся к теме оповещения пользователей в главе 8 «Пишем интерактивный скрипт».

Рис.2.1. Скрипт script1.sh

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

export PATH=»$PATH:~/scripts»

Если вы только знакомитесь с Bash, используйте текстовый редактор, в котором для различных конструкций оболочки используются различные цвета. Подсветка синтаксиса поддерживается в vim , gvim , (x)emacs , kwrite и во многих других редакторах, смотрите документацию к вашему любимому редактору.

Выполнение скрипта

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

willy:~/scripts> chmod u+x script1.sh willy:~/scripts> ls -l script1.sh -rwxrw-r— 1 willy willy 456 Dec 24 17:11 script1.sh willy:~> script1.sh The script starts now. Hi, willy! I will now fetch you a list of connected users: 3:38pm up 18 days, 5:37, 4 users, load average: 0.12, 0.22, 0.15 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty2 — Sat 2pm 4:25m 0.24s 0.05s -bash willy:0 — Sat 2pm ? 0.00s ? — willy pts/3 — Sat 2pm 3:33m 36.39s 36.39s BitchX willy ir willy pts/2 — Sat 2pm 3:33m 0.13s 0.06s /usr/bin/screen I’m setting two variables now. This is a string: black And this is a number: 9 I’m giving you back your prompt now. willy:~/scripts> echo $COLOUR willy:~/scripts> echo $VALUE willy:~/scripts>

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

Если вы в переменной не указали директорий или (текущий каталог), вы можете активировать скрипт следующим образом:

./script_name.sh

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

rbash script_name.sh sh script_name.sh bash -x script_name.sh

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

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

source script_name.sh

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

willy:~/scripts> source script1.sh —output ommitted— willy:~/scripts> echo $VALUE 9 willy:~/scripts>

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

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

Начнем с простых примеров

Команда ниже покажет вам ваш внешний IP - это идеальный вариант, если в Сеть вы входите используя роутер. Эта команда обращается к серверу ifconfig.co, который возвращает IP одной строкой без лишней писанины которая вам не нужна.

Curl ifconfig.co

Да, это не скрипт, это небольшая команда, но если вы хотите превратить эту команду в скрипт, вам достаточно поместить ее в текстовый файл, в итоге у нас получится небольшой bash скрипт:

#!/bin/bash curl ifconfig.co

Сохраняeм скрипт в каталог ~/bin и даем права на исполнение:

Chmod +x ~/bin/yourip.sh

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

C айпи закончили, посмотрим погоду с консоли.

#!/bin/sh curl -4 wttr.in/Kiev

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

#!/bin/sh dig +short txt $1.wp.dg.cx

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

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

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

Используя простые скрипты и команд, вы можете слушать интернет-радио:

#!/bin/sh mpv --volume=50 -playlist ~/16bit.fm_128.m3u

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

Echo "volume +10" | socat - /tmp/mpvsocket

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

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

#!/bin/sh tar -czf "../${PWD##*/}.tar.gz" .

Это скрипт создает архив tar.gz для текущего кaталога. Особое внимание нужно уделить конструкции ${PWD##*/}, которая бeрет весь путь до текущего каталога (переменная $PWD) далее удаляет первую чаcть до последнего слеша, в итоге остается лишь имя каталoга и к нему добавляется расширение tar.gz. Если вы хотите узнать больше информации по подобных конструкциях, вы можете прочитать выполнив в консоли команду man bash.

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

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

Notify-send "Файл изменен"

Для рабочего стола

Ниже вы увидите пример скрипта, который загружает случайные обои, которые опубликованы на reddit-канале wallpaper:

#!/bin/bash wget -O - http://www.reddit.com/r/wallpaper |\ grep -Eo "http://i.imgur.com[^&]+jpg" |\ shuf -n 1 |\ xargs wget -O background.jpg feh --bg-fill background.jpg

Работает все довольно просто. Используя утилиту wget скрипт загружает страницу www.reddit.com/r/wallpaper, далее передает ее grep, который уже ищет ссылки на imgur, и выбирает случайную с помощью shuf, загружает ее с помощью wget и устанавливает в качестве обоев для вашего рабочего стола, используя команду feh (это миниатюрный просмотрщик изображений, который нужно предварительно устанoвить). Вы этот скрипт можете добавить в обычный текстовый файл как я описывал выше, сохранить в формате sh, сделать исполняемым, добавить к нему иконку и запускать с рабочего стола по клику и у вас будут меняться обои.

#!/bin/sh state=`synclient | grep TouchpadOff | cut -d "=" -f 2` if [ $state = "1" ]; then synclient TouchpadOff=0 else synclient TouchpadOff=1 fi

Скрипт выше используется для включения и выключения тачпада вашего ноутбука: включает, если отключен, и наоборот. Для корректной работы в нем используется утилита synclient, которая и позволяет управлять тачпадами которые в большинстве производит Synaptics, это 90% возможно даже и более. После запуска утилита выводит много информации, так же строку TouchpadOff = 1, если он активирован, и TouchpadOff = 2, если отключен. Скрипт прочитав эти значение и в зависимости от состояния тачпада включит или отключит его.

!#/bin/bash mpv tv:// -frames 3 -vo jpeg mv 00000003.jpg photo.jpg rm -f 0000*.jpg

Используя скрипт выше, вы можете создать снимок используя веб-камеру. В скрипте используется видеоплеер mpv который записывает первые три кадра, снятые камерой, в файлы JPEG формата с именами 0000000.jpg, 00000002.jpg, 00000003.jpg итд, после переименовывается третий снимок в файл photo.jpg, а остальные удаляются. Для чего используются три снимка? Они необходимы лишь для того, чтобы ваша камера успела провести инициализацию, если использовать первые два снимка, то обычно вы получите черный снимок. Бывают так же казусы с позиционированием, фото может быть перевернутым; чтобы этого избежать mpv нужно запускать с флагом -vf flip:

Mpv tv:// -frames 3 -vf flip -vo jpeg

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

#!/bin/bash while true; do sudo cat /dev/input/mouse0 | read -n1 mpv tv:// -frames 3 -vo jpeg mv 00000003.jpg `date +%F-%H-%M`.jpg rm -f 0000*.jpg sleep 10 done

Скрипт выше использует бесконечный цикл, получая данные с устройства /dev/input/mouse0. Если данные есть, значит, мышь была сдвинута или была нажата одна из ее кнопок. После используется mpv, для создания трех снимков, третьему снимку присваивается имя текущей даты и удаляются первые два.

Если вы хотите записать полноценное видео с веб-камеры, как пример можно использовать подобный скрипт:

#!/bin/bash mencoder tv:// -tv driver=v4l2:width=800:height=600:device=/dev/video0:fps=30:outfmt=yuy2:forceaudio:alsa:adevice=hw.2,0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800 -ffourcc xvid -oac mp3lame -lameopts cbr=128 -o video.avi

В результате вы получите файл с названием video.avi в формaте MPEG4, битрейт 1800 и аудиофайл в формате MP3 с битрейтом 128.

#!/bin/bash ffmpeg -f x11grab -r 25 -s 1366x768 -i:0.0 screencast.mpg

Используя скрипт выше, вы можете записать полноценный скринкаст. 1366×768 - это разрешение рабочего стола, можете настроить под себя. Для создания скриншота отдельного окна, вы можете использовать команду import:

Import screenshot.png

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

Вы также можете настроить внешний монитор используя консоль:

#!/bin/sh if [ -z "$1" ]; then exit fi if [ $1 == "off" ]; then xrandr --output VGA-0 --off xrandr -s 0 else if [ $1 == "on"]; then xrandr --output LVDS --auto --primary --output VGA-0 --auto --left-of LVDS xrandr --newmode "1920x1080" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync xrandr --addmode VGA-0 1920x1080 xrandr --output VGA-0 --mode 1920x1080 fi xrandr --dpi 96

Этот скрипт основывается на том, что основной монитор имеет имя LVDS, а внешний - VGA-0. Это стандартная ситуация для всех ноутбуков; если вы не уверены, можно проверить выполнив команду xrandr: при передаче скрипту аргумента off он отключает внешний монитор, аргумент on , в свою очередь, включает его, располагая по левую сторону от основного (аргумент -left-of LVDS в первoй команде). После скрипт создает новую конфигурацию для монитоpа с разрешением 1920 x 1080 и активирует его. И под конец, скрипт устанавливает дефолтное знaчение DPI - так как при подключении монитора с другим разpешением оно часто слетает.

В большинстве случаев команды xrandr -newmode … и xrandr -addmode … не нужны, так как Xorg получит конфигурацию монитора и разрешение с помощью EDID. Иногда, однако, этого не происходит, и строку конфигурации, указываемую после аргумента -newmode , приходится генерировать самостоятельно с помощью инструмента cvt:

Cvt 1920 1080

Используя инструмент cvt, можно сгенериpовать нестандартны разрешения, которые не поддерживаются монитором по умолчанию.

Ищем в Google из командной строки

Вернемся снова к сетевым сервисам. Как получить первый 10 результатов поиска в Google? Смотрим скрипт ниже:

#!/bin/bash Q=" " URL="https://www.google.de/search?tbs=li:1&q=" AGENT="Mozilla/4.0" stream=$(curl -A "$AGENT" -skLm 10 "${GOOG_URL}${Q//\ /+}" | grep -oP "\/url\?q=.+?&" | sed "s|/url?q=||; s|&||") echo -e "${stream//\%/\x}"

Этот скрипт отправляет запрос к Google с помощью curl, заменяет пробелы в поисковой строке на плюсы. После в ответном HTML выскакивают ссылки

Пример с сервисом YouTube:

#!/bin/bash mpv -fs -quiet `youtube-dl -g "$1"`

Скрипт с примера выше проигрывает видео с указанным в аргументе ID с помощью плеера mpv. Заранее нужно установить youtube-dl.

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

#!/bin/bash USER="Ваш Ник" while true; do CMD=`echo "/dma +1" | ttytter -script | sed "s/\[.*\]\ //" if [ $CMD != $OLD_CMD ]; then REPL=`$CMD` echo "/dm $USER ${REPL:0:140}" | ttytter -script CMD = $OLD_COMD fi sleep 60 done

В скрипте используется консольный клиент ttytter, читая с цикла последнее значение direct message, после происходит проверка, не была ли эта команда выполнена, если нет, выполняет ее и отправляет указанному юзеру с переменной USER обрезая до 140 символов.

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

Использовать твиттер можно не лишь в целях создания бота, но и для мониторинга машины. Скрипт ниже отправляет в ленту сообщение с информацией о состоянии машины (имя хоста, uptime, нагрузка, свободная память и нагрузка на CPU):

#!/bin/bash HOST=`hostname -s` UP=`uptime | cut -d" " -f4,5 | cut -d"," -f1` LOAD=`uptime | cut -d":" -f5,6` MEM=`ps aux | awk "{ sum += $4 }; END { print sum }"` CPU=`ps aux | awk "{ sum += $3 }; END { print sum }"` tweet="Host: ${HOST}, uptime: ${UP}, cpu: ${CPU}%, memory: ${MEM}%, loadavg ${LOAD}" if [ $(echo "${tweet}" | wc -c) -gt 140 ]; then echo "FATAL: The tweet is longer than 140 characters!" exit 1 fi echo $tweet | ttytter -script

Напоследок смотрим скрипт ниже, этот скрипт используется для запуска и остановки торрент-клиента пока ваш ПК простаивает:

#!/bin/bash IDLE=600000 STOPCMD="transmission-remote -S" STARTCMD="transmission-remote -s" STOPPED="yes" while true; do if [ `xprintidle` -gt $IDLE ]; then if [ $STOPPED = "yes" ]; then $STARTCMD STOPPED="no" fi else if [ $STOPPED = "no" ]; then $STOPCMD STOPPED="yes" fi fi sleep 60 done

Каждую минуту скрипт уходит в бесконечный цикл и проверяет, сколько времени в миллисекундах прошло с момента, когда юзер выполнял последние действия (для этих целей используется xprintidle). Если прошло 600 000 мс (десять минут), скрипт выполняет команду, которая укaзана в переменной STARTCMD. В ином случае выполняется команда STOPCMD, но лишь в том случае, если до нее была выполнена STARTCMD. Если объяснить простым языком, вы ничего не делаете за компьютером десять минут, после запускается STARTCMD, в нашем случае это команда которая запускает все закачки в Transmission, если нет - все закачки приостанавливаются. Не любите клиент Transmission? Используем команды для Deluge, смотрим ниже:

STOPCMD="deluge-console pause \*" STARTCMD="deluge-console resume \*"

Вывод

Прежде всего давайте разберём, что такое script и для чего он нужен.

Script в переводе с английского - сценарий . Все мы смотрим фильмы, многие из нас - спектакли. Чтобы создать фильм/спектакль, сценаристы пишут к ним сценарии, на основании которых артисты, сценка за сценкой исполняют на сцене свои роли, из чего и складывается фильм/спектакль. Работа по созданию сценария довольно кропотливая, где нужно учесть всё до мелочей, чтобы в конечном итоге артисты могли выполнить задуманное сценаристом, а зритель увидел целостное произведение.

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

Для начала давайте создадим самый, что ни на есть, простейший скрипт-Shell для обновления системы.

Все действия я буду проводить с системе Ubuntu , но они применимы и к другим системам Linux , производных от Ubuntu . Для этого нам понадобятся: Текстовый редактор , чтобы наполнить его нужными задачами для создания скрипта (кода) и Терминал - для выполнения созданного скрипта. Эти инструменты установлены в любом дистрибутие Linux по умолчанию.

Итак, открываем текстовый редактор Gedit и вводим в него первые обязательные символы под названием shebang .
shebang в программировании, это последовательность из двух символов: решётки и восклицательного знака (#! ) в начале файла скрипта. И добавляем к данным символам без пробелов /bin/sh - интерпретатор, где будет выполняться скрипт. /bin/sh - это обычно Bourne shell или совместимый интерпретатор командной строки, который передаёт "path/to/script" как первый параметр.
Первая обязательная строка скрипта будет выглядеть следующим образом:

# Мой первый Script обновления Ubuntu

Знак решётки (#) в самом начале строки даёт понять интерпретатору/терминалу, что эту строку читать и выполнять не нужно. Строка нужна в коде данного скрипта для того чтобы сам создатель скрипта знал, что он собирается выполнить на данном отрезке/сценке в коде, чтобы не запутаться в дальнейшем, когда таких строк будет много. Такие строки с знаком решётки называются - закомментированные .

sudo apt update
sudo apt upgrade -y

-y в конце второй команды даёт понять интерпретатору/терминалу, что это действие/команду нужно выполнить автоматически, без дополнительного подтверждения пользователем, нажатия клавиши Ввод . y - сокращённо от английского yes , т.е. да .

Вот и всё. Ваш первый скрипт создан. У вас должно получиться как на снимке:


Остаётся сохранить созданный файл/скрипт и дать ему Имя с обязательным расширением в конце - .sh . Расширение .sh присваивается исполняемому файлу.
Я дал ему Имя - обновление.sh , сохранив в Домашней папке пользователя:


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

1. Выполнить следующую команду в терминале:

sudo chmod +x обновление.sh

2. Либо открыть файловый менеджер в Домашней папке (где вы сохранили созданный скрипт), правый клик на файле, в контекстном меню - Свойства - Права и активировать пункт - Выполнение : Разрешить выполнение файла как программы :


Чтобы выполнить созданный скрипт, нужно открыть терминал (о чём я писал в самом начале статьи, что терминал - необходимый атрибут/инструмент для выполнения скрипта), ввести sh , через пробел название скрипта - обновление.sh и нажать клавишу Ввод :


Либо в терминале вводим sh и перетаскиваем из файлового менеджера созданный файл с скриптом (также через пробел):


После того как путь к файлу отобразится после команды sh и пробела, достаточно нажать клавишу Enter (Ввод), чтобы выполнить обновление системы:


Теперь в любой момент вы можете сделать обновление системы созданным собственным скриптом.

Да, кто-то может возразить, что обновление системы не сложно сделать выполнением этих двух команд в терминале, зачем пыжиться и создавать какие-то скрипты? Всё верно. Но это пример создания простейшего скрипта, чтобы показать, что "не боги горшки обжигают" 😃.

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

Многие из вас, скорее всего, пользуются сайтами по настройке системы, типа тех что я публикую после выхода очередного релиза Ubuntu - Ubuntu после установки или подобными сайтами. Откройте один из таких сайтов: , затем текстовый редактор для создания скрипта.
Для примера я сделал следующую заготовку.

В текстовом редакторе вводим первую обязательную строку:

# Настройка Ubuntu после уставновки
# Обновление системы

Ниже следуют команды обновления системы:

sudo apt update
sudo apt upgrade -y

Строка описания: Добавление репозиториев:

# Добавление репозиториев

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

sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner" -y
sudo add-apt-repository ppa:atareao/telegram -y
sudo add-apt-repository ppa:atareao/atareao -y

sudo add-apt-repository ppa:nemh/systemback -y
sudo add-apt-repository ppa:gerardpuig/ppa -y
sudo add-apt-repository ppa:haecker-felix/gradio-daily -y

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

Строка с описанием:

# Обновление системы после подключения репозиториев

И команда на выполнение:

sudo apt update

Теперь, когда репозитории добавлены и система обновлена, наступила очередь в установке программ:

# Установка программ

Для установки программ достаточно один раз ввести команду sudo apt install , а затем через пробел в данную строку добавлять сколько угодно программ, главное чтобы они были правильно составлены. Если какая-то программа состоит из нескольких слов, её команда должна быть монолитной, т.е. все слова в ней должны вводится через чёрточку, например: unity-tweak-tool :

sudo apt install my-weather-indicator telegram skype lm-sensors hddtemp psensor gdebi systemback unity-tweak-tool ubuntu-cleaner gradio -y

Установка дополнительных кодеков

# Мультимедиа и кодеки

sudo apt install ubuntu-restricted-extras -y

Отключение о сбоях в системе

# Отключить отчёты о сбоях в системе

sudo sed -i "s/enabled=1/enabled=0/g" "/etc/default/apport"

Ну вот, пожалуй, и всё. Данный созданный файл сценария должен выглядеть следующим образом:


Необходимо сохранить его (нажать кнопку Сохранить ) и дать Имя с расширением .sh . Я назвал его Настройка\ Ubuntu.sh (вы можете назвать по-другому, но обязвтельно с расширением.sh):


Делаем созданный скрипт исполняемым:

sudo chmod +x Настройка\ Ubuntu.sh

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

Примечание . Обратный слэш в команде Настройка\ Ubuntu.sh экранирует пробел в названии файла для терминала между двумя отдельными словами.

После того как скрипт будет выполнен, хранить его на будущее, для возможной переустановки системы и повторной настройки, лучше всего на отдельном разделе ж/диска в папке /home . Если таковой нет, то в облачном сервисе (Облачное хранилище данных) типа: DropBox, Облако Mail.Ru, Mega.co и т.п., чтобы в любой момент воспользоваться скриптом самому, либо помочь знакомым или родственникам в настройке системы.