Администрирование FreeBSD, Linux, ... ASPLinux: как сделать и запустить скрипт (командный файл) Thu, April 27 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


ASPLinux: как сделать и запустить скрипт (командный файл) Печать
Добавил(а) microsin   

Создание и использование скрипта здесь описано на примере конфигурирования сетевых интерфейсов.

Итак, процесс по шагам:
- сначала в любом текстовом редакторе создаем файл с произвольным названием и расширением (пусть это будет firstscript.txt) и запишем туда какую-нибудь команду (например ifconfig eth0 down).
- меняем добавляем права на запуск к этому файлу. Это можно проделать командой chmod или с помощью GUI-интерфейса (правой кнопкой щелкаем на файл и выбираем Properties).
- запускаем файл двойным кликом или введя его имя в командной строке:
# . имя_файла
   или
# bash имя_файла
- для скриптов рекомендуется использовать расширение .sh
- если в начале текстового файла есть строка #!/bin/bash (это так называемая "магическая строка" - "shebang"), то тогда такой файл тоже будет интерпретироваться системой как скрипт (все остальные строки будут переданы указанному командному процессору bash). Файл может также начинаться на #!/bin/sh.
- ОЧЕНЬ ВАЖНЫЙ МОМЕНТ: строки должны заканчиваться Unix-like (только LF или символ 0x0A), ни в коем случае не Windows-like (CR+LF или 0x0D,0x0A). Для этого под Windows лучше воспользоваться специальным редактором, например notepad2.

[Пример - настройка сети и моста на ASPLinux10 скриптом]

Перед выполнением этого скрипта я сделал так, что у меня сетевые интерфейсы при загрузке ASPLinux не настраивались (ifconfig выдавал только конфигурацию интерфейса lo [loopback]). Это я проделал GUI-оснасткой. Потом написал следующий скрипт (/root/Desktop/network_setup.txt):

ifconfig eth0 0.0.0.0
ifconfig eth0 down
ifconfig eth1 0.0.0.0
ifconfig eth1 down

brctl addbr mybridge0
brctl addif mybridge0 eth0
brctl addif mybridge0 eth1

ifconfig mybridge0 loc1.loc2.11.111
ifconfig mybridge0 broadcast loc1.loc2.255.255
ifconfig mybridge0 netmask 255.255.0.0
ifconfig mybridge0 up

ifconfig eth0 up
ifconfig eth1 up

route add -net 0.0.0.0 netmask 0.0.0.0 gw loc1.loc2.0.254 dev mybridge0

Чтобы этот скрипт автоматически загружался при включении компьютера, в файле /etc/rc.d/rc.sysinit в конце я указал строку (просто указал путь к скрипту и его название):
/root/Desktop/network_setup.txt

Само собой, перед этим я установил права на запуск этого файла (см. пост 97). Кроме того, команды на запуск скрипта можно вставить в файл /etc/rc.d/rc.local.

[Передача параметров в скрипт]

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

. имя_скрипта.sh AAA BBB CCC

Тогда в теле скрипта автоматически появятся переменные $1, $2 и $3, которые будут равны AAA, BBB и CCC соответственно. Подробности см. в [1].

[Использование переменных]

mysqluser="user_name_here"
mysqlpass="password_here"
mysqlbase="base_name_here"

Этот пример добавляет в код три переменные $mysqluser, $mysqlpass, $mysqlbase с установленными значениями. Внимание: нельзя добавлять пробелы до и после оператора присваивания =, иначе скрипт будет выполняться неправильно.

[Проверка значений текстовых переменных]

if [ "$1" == "off" ]; then
    #тут ветка, когда в командную строку передали off
    ..
    echo "security off"
elif [ "$1" == "on" ]; then
    #тут ветка, когда в командную строку передали on
    ..
    echo "security on"
else
    #тут ветка, когда в командную строку передали неверный параметр
    echo "usage . sec.change.sh [on|off]"
fi

Внимание: пробелы до и после скобок [ ], а также вокруг оператора равенства == очень важны, иначе скрипт не будет правильно работать.

[Ссылки]

1Passing arguments to a shell script (передача аргументов в скрипт).

 

Добавить комментарий


Защитный код
Обновить

Top of Page