Как писать скрипты (аналог bat файлы в виндах)?
Так же как и в виндах: написал в текстовом файле команды каждая с новой строчки, переименовал этот файл в bat и можно запускать его?
Есть где манула по этой теме?
Re: Как писать скрипты (аналог bat файлы в виндах)?
Re: Как писать скрипты (аналог bat файлы в виндах)?
PS: что меня всегда удивляло, так это то, что в сообществе Linux на свой вопрос, в большинстве случае, получишь либо «Ги, сына, LOL (c)» либо. ни хрена не получишь. ;-Е
Так держать, господа линуксоводы! Еще немножко и билл г. будет призидентом земного шара. ;(
Re: Как писать скрипты (аналог bat файлы в виндах)?
Re: Как писать скрипты (аналог bat файлы в виндах)?
Гы, сына, ЛОЛ! А не пробовал зайти в раздел «документация»?
Re: Как писать скрипты (аналог bat файлы в виндах)?
Поищи ещё книгу: Linux & UNIX програмирование в SHEL автор Дэвид Тейнсли . прошу не путать с Фигурновым
Re: Как писать скрипты (аналог bat файлы в виндах)?
> Так же как и в виндах: написал в текстовом файле команды каждая с новой строчки, переименовал этот файл в bat и можно запускать его?
ОС анализирует файловый атрибут исполняемости файла (существуют: read, write, execute).
Далее, в случае успеха, определяется тип файла.
В текстовом файле проводится анализ первой строчки, в которой может быть указан интерпретатор:
т.е. имя файла роли не играет. Важно: признак исполнения и содержимое.
как создать аналог батника?
собственно хочу создать батник, например для запланированного выключения
через консоль прописал и работает, а как создать файлик, где его сохранить, и как его запускать?
/ — сокращение для домашней директории твоего пользователя, т.е. для /home/user
собственно, можно создать файлик руками в текстовом редакторе и вписать туда
а как сделать ярлык на рабочем столе, для запуска этого файла?
иначе запуститься «внутреняя» команда из набора встроенных утилит терминала которые обычно обзываются — core-utilits.
в убунте полный путь до команды может быть другой, командой
нужно узнать полный путь до команды shutdown, т.к её место размещение может быть другое
заскриншотил
sgww
WWW.SGWW.RU
живой журнал SGWW
Командные файлы Linux
В Linux, так же как и в операционных системах семейства Microsoft Windows можно создавать командный файл . которые содержат в себе набор команд интерпретатора shell. Такие файлы имеют свой синтаксис, который позволяет оперировать такими структурами как циклы и условия. Далее основы shell программирования linux на примере командной строки ubuntu 9.04 и интерпретатора bash.
Основы
Запишем в файл sample последовательность команд
$ cat sample
pwd
ls
echo The END
А теперь выполним эти команды
$ sh sample
/home/sgww
cpp file.txt mydaemon net_sh perl php sample
The END
Таков принцип .
Командный файл легко сделать исполняемым
$ chmod +x sample
$ /home/sgww/sample
/home/sgww
cpp file.txt mydaemon net_sh perl php sample
The END
$ cat sample
read x #вводим x
read y #вводим y
echo `expr $x ‘*’ $y + 7`
Всё что за знаком # это коментарий и интерпритатором не воспринимается
Не относится к оболочке csh!
Параметры
$1, $2 . $9 — позволяют задавать аргументы командной строки для выполняемого файла
$ cat sample
echo the first parameter: $1
echo the second parametr: $2
echo the third parameter: $3
ls $1 $2 $3
$ /home/sgww/sample -l -s -r
the first parameter: -l
the second parametr: -s
the third parameter: -rtotal 28
4 -rwxr-xr-x 1 sgww sgww 100 Mar 2 11:19 sample
4 drwxr-xr-x 2 sgww sgww 4096 Dec 15 16:52 php
4 drwxr-xr-x 2 sgww sgww 4096 Feb 1 15:39 perl
4 -rw-r—r— 1 sgww sgww 79 Mar 1 16:16 net_sh
4 drwxr-xr-x 2 sgww sgww 4096 Feb 1 17:15 mydaemon
4 -rw-r—r— 1 sgww sgww 56 Mar 1 17:18 file.txt
drwxr-xr-x 2 sgww sgww 4096 Feb 1 17:15 cpp
$# — задает общее количество параметров с которым вызывается командный файл
$ cat sample
echo total parameters are: $#
$ sample param1 param2 param3
total parameters are: 3
$* — содержит сразу все параметры
$ cat sample
echo total parameters are: $*
$ sample All parameters are in this variable
total parameters are: All parameters are in this variable
Переменные
Имя переменной может начинаться с буквы или символа подчереркивания
знак равенства(=) это оператор присваиивания
_var=1
_word =slovo
value=»t ak aia dli nna iain epo niat naia str oka»
Тип данных переменных shell это всегда строка символов!
$ cat sample
_string=»Hello from Perm»
echo $_string
$ /home/sgww/sample
Hello from Perm
результат выполения команды в переменную (команда обрамляется обратными апострофами)
$cat sample
_date=`date`
echo $_date
$/home/sgww/sample
Tue Mar 2 11:41:30 YEKT 201
ввод значения переменной в консоли
$ cat sample
echo Enter data:
read data1
read data2
echo Your data: $data1 and $data2
$ /home/sgww/sample
Enter data:
Linux
Windows
Your data: Linux and Windows
Системные переменные
$ cat sample
echo $PATH
echo $HOME
echo $MAIL
echo $SHELL
$ /home/sgww/sample
/usr/local/bin:/usr/bin:/bin:/usr/bin/X1 1:/usr/games
/home/sgww
/var/mail/sgww
/bin/bash
PATH — пути поиска исполняемых файло (так как каталога /home/sgww/ там нет, постояно приходилось писать полный путь /home/sgww/sample для выполнения команды)
HOME — домашний каталог
MAIL — файл электронной почты
SHELL — оболочка в которой работаем
Добавим к переменной PATH каталог HOME что бы не приходилось постоянно писать полный путь
$ cat sample
PATH=$PATH:$HOME
Эти строки следует добавить в
/.bash_profile
теперь нет необходимости писать полный путь до команды
Специальные символы
* — любая последовательность, любых символов
? — один любой символ
[. ] — любой из символов диапазона
$echo *
cpp file.txt mydaemon net_sh perl php sample
$ echo «*»
*
$ cat sample
text=»This is a text»
echo ‘$text’
$ sample
$text
$ cat sample
text=»This is a text»
echo \$text
$ sample
$text
$ cat sample
text=`pwd`
echo $text
$ sample
/home/sgww
Арифметические операции
Для выполнения арифметических операций в командном файле понадобиться команда expr
$ expr 7 + 96
103
$ expr 87 — 555
-468
$ expr 18 / 2
9
$ expr 19 / 2
9
$ expr 19 % 2
1
$ expr 6 \* 32
192
$ expr 6 ‘*’ 32
192
$ expr 6 * 32
expr: syntax error
Если при умножении не поставить \ или » то * будет восприниматься как любой символ
Стоит отметить, что \ — это не деление, а целая часть от деления, операция % дает остаток от деления
Переменные окружения, команда export и unset
Для взаимодейстивя с другими процессами могут пригодияться переменные окружения
Их полный списко можно посмотреть командой export
$ export
declare -x HISTCONTROL=»ignoreboth»
declare -x HOME=»/home/sgww»
declare -x LESSCLOSE=»/usr/bin/lesspipe %s %s»
declare -x LESSOPEN=»| /usr/bin/lesspipe %s»
declare -x LOGNAME=»sgww»
.
Задать свою переменную
$ name=Pavel && export name
$ echo $name
Pavel
$ unset name
$ echo name
Условие IF
Для составления условных выражений оператора if очень полезна программа test.
$ cat sample
if test -r sample
then
echo True
else
echo False
fi
$ sample
True
В этом примере test -r sample — это условие
echo True выполняется если условие истино
echo False если ложно
Программа test предназначена для проверки типов файлов и сравнения значений
$test -r file # Истино если файл file существует и доступен для чтения
$test -w file # Истино если файл file существует и доступен для записи
$test -x file # Истино если файл file существует и доступен для выполнения
$ x=32 && export x
$ y=32 && export y
$test $x -eq $y # Истино если $x равен $y
$test $x -en $y # Истино если $x не равен $y
$test $x -ge $y # Истино если $x больше или равен $y
$test $x -gt $y # Истино если $x больше $y
$test $x -le $y # Истино если $x меньше или равен $y
$test $x -lt $y # Истино если $x меньше $y
Остальные параметры можно посмотреть в man test
Цикл FOR
$ cat sample
for x in 1 two 3
do
echo $x
done
$ sample
1
two
3
В этом цикле код между do и done выполниться 3 раза, при этом первый раз
x=1, второй раз x=two и последний x=3
Другой интересный пример
$ cat sample
for x in *
do
echo $x
done
$ sample
cpp
demo
file.txt
mydaemon
net_sh
perl
php
sample
* в списке переменных цикла, заставляет for использовать в качестве значения $x элементы текущего каталога
Циклы WHILE и UNTIL
$ cat sample
while test -r file
do
sleep 10
echo file exists
done
echo file does not exist
$ touch file
$ sample
file exists
file exists
Ctr+Z
[1]+ Stopped sample
$ rm file
$ fg
sample
file exists
file does not exist
$ cat sample
until test -r file
do
sleep 5
echo file does not exist
done
echo file exists
$ sample
file does not exist
file does not exist
Ctr+Z
[1]+ Stopped sample
$ touch file
$ fg
sample
file does not exist
file exists
$