admin / 22.03.2018

Руководство по созданию скриптов для Bash

.

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

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

    Создадим в командной строке Linux пустой файл (назовем его для примера firstscript) и откроем его на редактирование в любимом текстовом редакторе (vi/vim, nano, gedit и т.д.):

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

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

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

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

$ clear;date

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

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

# /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 (Основы)

Автор: Admin

Дата:2012-12-10

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

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

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

vim bash1.sh

#!/bin/bash
who; date

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

Дальше мы просто выполняем две команды подряд.
Здесь стоит обратить внимание на две особенности:

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

chmod u+x bash1.sh

2) echo $PATH

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

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

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

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


Переменные

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

vim bash2.sh

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

Далее >>> Изучаем BASH (Интсрукции)

Количество просмотров: 6471

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

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

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


Руководство по Bash для начинающих
Назад Глава 2: Пишем и отлаживаем скрипты Вперед

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

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

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

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

Подсвечивание синтаксиса в редакторе vim

Для того, чтобы активировать подсветку синтаксиса в редакторе vim, используйте команду

:syntax enable

или

:sy enable

или

:syn enable

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

Набирайте команды 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 и во многих других редакторах, смотрите документацию к вашему любимому редактору.

Различные строки приглашений

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

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

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

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

source = .

Встроенная команда Bash source является синонимом команды . (точка), имеющейся в оболочке Bourne.

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

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


Если вам понравилась статья, поделитесь ею с друзьями:


Средняя оценка 1 при 1 голосовавших

Комментарии

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*