Сайт | Скачать | Видео | Wiki

Автор Тема: Написание скриптов  (Прочитано 29280 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Написание скриптов
« : 05 Май 2009, 13:20:22 »
Хотелось бы поизучать. Кто у нас мастак скриптописания? подскажите, что почитать на эту тему. Есть ли компиллятор для них, а не только интерпретатор. Интересует также, где взять хорошие откомментированные скрипты, для облегчения понимания процесса.

kostik

  • Гость

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы

DdShurick

  • Гость
Re: Написание скриптов
« Ответ #3 : 06 Май 2009, 08:21:48 »
а никому не попадались документы по написанию команд Dialog и Xdialog
с Xdialog боле мене понятно а вот Dialog это интереснее
Я обычно ищу на opennet.ru, и обычно нахожу. Вот навскидку
http://www.opennet.ru/base/dev/linux_dialog.txt.html

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #4 : 06 Май 2009, 15:24:23 »
Mendel Cooper, Перевод: Андрей Киселев, "Advanced Bash-Scripning Guide" или "Искусство программирования на языке сценариев командной оболочки" - один большой html-файл, 1,6 МБ

http://rus-linux.net/MyLDP/BOOKS/zip/lasg10.tgz

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #5 : 06 Май 2009, 16:53:40 »
как сделать скрипт исполняемым?
 
Код
chmod +x you_file
ну и
Код
man chmod
(справка)
http://ru.wikipedia.org/wiki/Chmod

Кстати заметил что скрипты запускаются и без этой процедуры. Почему? кто обьяснит?
« Последнее редактирование: 06 Май 2009, 19:20:03 от Zloy_T »

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #6 : 06 Май 2009, 16:55:22 »
 Скрипты - это просто.

Любой начинающий системный администратор Linux рано или поздно сталкивается с таким понятием, как “скрипт”, будь то один из загрузочных скриптов вроде /etc/rc.d/rc или написанный разработчиком ПО скрипт конфигурирования configure. В данной статье я постараюсь показать, что написание скриптов на shell не является чем-то из ряда вон выходящим и вполне под силу даже новичку в мире Linux.

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

Одной из задач системного администрирования является резервное копирование важной информации. Поэтому давайте рассмотрим пример скрипта, реализующего back-up информации.

Начало начал.

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

echo This is just example
whoami
uname -a

Эти команды объединены в одном файле. Но shell должен знать, что он должен этот файл обработать, а не просто прочесть его содержимое. Для этого служит специальная конструкция: #!

Эта конструкция называется «sha-bang». Вообще-то, # задает комментарий, но в данном случает sha-bang означает, что после нее пойдет путь к обработчику скрипта. Напрмер:

#!/bin/bash
#!/bin/sh
#!/usr/bin/perl

Мы остановимся на Bash, Bourne-Again shell. Это shell устанавливается по умолчанию практически во всех Linux-системах, и /bin/sh ссылается на него. Об окончании скрипта говорит служебное слово exit.

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

#!/bin/bash
echo Простой скрипт # Команда echo выводит сообщение на экран
echo Вы:
whoami # whoami показывает имя зарегистрированного пользователя
echo Ваша система стартовала
uptime # uptime показывает время включения машины
echo Сегодня
date # date показывает текущую дату и время
echo Пока все
exit

Сохраним этот файл под именем tutor1.sh. Выполним команду chmod +rx tutor1.sh чтобы сделать скрипт исполняемым.

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

voland@superstar:~/Doc/Open Source$ ./tutor1.sh
Простой скрипт
Вы:
voland
Ваша система стартовала
14:38:46 up 1:48, 2 users, load average: 0.47, 0.43, 0.41
Сегодня
Вск Фев 26 14:38:46 MSK 2006
Пока все

Переходим к более серьезному.

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

Перво-наперво, необходимо определить – резервную копию чего мы будем делать. Поэтому наш скрипт должен уметь работать с командной строкой. Аргументы командной строки задаются после имени скрипта через пробел: somescript arg1 arg2 arg3. Скрипт воспринимает аргументы по номерам их следования, поэтому мы будем использовать конструкции вида $номер_аргумента, т.е. , , . $ - это символ подстановки, который нам понадобится и при работе с переменными. Переменные в скрипте задаются в виде имя_переменной=значение. Мы будем использовать переменные MAXPARAMS для определения максимального количества параметров командной строки, BACKUPFILE для задания имени архива, BACKUPDIR для папки, резервную копию которой мы будем делать и ARCHIVEDIR для папки, куды мы поместим архив. Самой главной частью скрипта будут команды поиска и архивации всех найденных файлов и папок в указанной:

find . -type f -print0 | xargs -0 tar rvf "$archive.tar" > /dev/null
gzip $archive.tar

Давайте разберемся, что же эти команды делают. find ищет в текущем каталоге (об этом говорит первый аргумент ".") все файлы и выдает полный путь к ним (print0). Эти пути перенаправляюся команде tar, которая собирает все файлы в один. Затем командой gzip мы архивируем получившийся tar-файл. Команда > /dev/null удобна, если вы архивируете большое количество файлов. В этом случае их имена и полный путь к ним не выводятся на консоль.

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

Например, эта конструкция

if [ $# -lt "$MAXPARAMS" ];
then
echo
echo "Использование: sh `basename {PAGE_TEXT}` имя_архива папка-источник папка-назначение"
echo
exit 0
fi

подскажет, что пользователь указал недостаточное количество аргументов командной строки. If [условие]...fi задает условную конструкцию. $# -lt "$MAXPARAMS" проверяет введенное количество параметров и если это число окажется меньше MAXPARAMS, то пользователю будет выдано сообщение об ошибочном вводе. Exit 0 заставит скрипт прекратить работу без указания кода ошибки. Аналогично проверяется превышение допустимого числа параметров, только вместо ls (less then – меньше, чем), необходимо указать gt (greater then – больше, чем). Теперь, когда основные моменты скрипта разъяснены, можно переходить к полной его версии:

#!/bin/bash
# Описание:
#+ Делает резервную копию всех файлов в указанной директории
#+ в "tarball" (архив tar.gz).
#+ Использование:
#+ sh backup.sh имя_архива папка-источник папка-назначение
#+ Автор:
#+ Александр "Voland" Теленьга

# Максимальное количество параметров командной строки
MAXPARAMS=3

if [ $# -lt "$MAXPARAMS" ];
then
echo
echo "Использование: sh `basename {PAGE_TEXT}` имя_архива папка-источник папка-назначение"
echo
exit 0
fi

if [ $# -gt "$MAXPARAMS" ];
then
echo
echo "Для этого скрипта нужно только $MAXPARAMS аргументов командной строки!"
echo
exit 0
fi

# Переменные, которые мы используем в скрипте
BACKUPFILE=-backup-$(date +%m-%d-%Y)
archive=$BACKUPFILE
BACKUPDIR=
ARCHIVEDIR=

#
(http://education.aspu.ru/page.php?id=79)

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #7 : 07 Май 2009, 00:31:10 »
правой мышью-создать-скрипт

Оффлайн yuracat

  • Новичок
  • *
  • Сообщений: 16
  • Репутация: +2/-0
Re: Написание скриптов
« Ответ #8 : 07 Май 2009, 06:02:25 »
правой мышью-создать-скрипт

Тут для яснсоти: создаётся файл и у него устанвливается атрибут исполнения (+x) автоматически. Так что "эта процедура" chmod +x ни куда не делась, её делает другой скрипт. ;D

Можно и без атрибута этого запустить и без строчки bin/bash внутри:  ;)
#sh myfile
потому что sh примет myfle как фаил содержащий команды - тупо скрипт.
sh не есть особенная команда, можно и bash, csh и т.д. (basic  ;D).
FreeBSD на ZX-Spectrum.. Я верю в это!

Оффлайн returning2009

  • Старожил
  • ****
  • Сообщений: 386
  • Репутация: +19/-0
Re: Написание скриптов
« Ответ #9 : 07 Май 2009, 09:45:22 »
засыпался на элементарном,написал в geany следующий скрипт:

#!/bin/bash

# echo привет влад
exit

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

DdShurick

  • Гость
Re: Написание скриптов
« Ответ #10 : 07 Май 2009, 09:55:44 »
В консоли
#!/bin/bash

echo "привет влад"
exit

В иксах

#!/bin/bash

xmessage "привет влад"
exit

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

Оффлайн returning2009

  • Старожил
  • ****
  • Сообщений: 386
  • Репутация: +19/-0
Re: Написание скриптов
« Ответ #11 : 07 Май 2009, 10:24:52 »
в консоли ввожу whoami
выводит root
что нужно писать в geany чтоб это сообщение выводилось в иксах?

DdShurick

  • Гость
Re: Написание скриптов
« Ответ #12 : 07 Май 2009, 11:27:34 »
 xmessage `whoami`
Кавычки обратные, на клавише с буквой Ё.

Оффлайн returning2009

  • Старожил
  • ****
  • Сообщений: 386
  • Репутация: +19/-0
Re: Написание скриптов
« Ответ #13 : 07 Май 2009, 19:30:56 »
написал следующий скрипт
#!/bin/bash
xmessage "сегодня:" `date` "Вы:" `whoami`
exit

выводит число дату,ну итд итп и кто я,но в одну строку,что написать чтоб число было в одну строку,а кто я, начиналось со следующей строки?

DdShurick

  • Гость
Re: Написание скриптов
« Ответ #14 : 07 Май 2009, 20:50:15 »
Код
#!/bin/sh
Xdialog --title "Ответ" --no-buttons --infobox \
"сегодня: `date` \nВы: `whoami`" 10 40 5000 #время показа окна в ms
exit