[1. Shell Script]
Shell это приложение, которое предоставляет интерфейс для взаимодействия между пользователем и ядром операционной системы (operating system kernel). Через shell пользователи могут посылать команды операционной системе, манипулировать файловой системой, запускать программы и выполнять различные системные задачи. Существует несколько разновидностей программ для shell (самые известные это sh, bash, csh, tcsh, ash), и все они представляют интерфейс командной строки, где пользователи вводят текстовые команды для выполнения различных задач.
sh (Bourne Shell): sh часто используется в операционных системах Unix и Linux. Его создатель Stephen Bourne, и это был один из самых первых шеллов Unix. Bash (Bourne-Again Shell): самый популярный shell в системах Unix и Linux. Это улучшенная версия Bourne Shell, предоставляющая мощные скриптовые возможности и богатый набор утилит командной строки. Dash: имя Dash означает Debian Almquist Shell, и эта утилита часто используется как shell по умолчанию для скриптов инициализации системы. Dash известен своим быстрым запуском и подходит для загрузки системы (system bootstrapping) и выполнения задач по сценариям (script tasks). Csh (C Shell) и Tcsh (Tenex C Shell): это варианты C Shell и они используются главным образом в системах Unix. Их синтаксис и функции отличаются от Bash. Ash (Almquist Shell): другой облегченный shell, обычно используемый во встраиваемых системах и облегченных дистрибутивах Linux.
[2. Создание вашего первого скрипта]
1. Создайте с помощью текстового редактора (например nano) новый текстовый файл с именем luckfox.sh. Расширение файла .sh часто используют для обозначения скрипта шелла (shell script), однако расширение файла никак не влияет на выполнение скрипта.
2. Вставьте в этот файл следующий текст и сохраните файл:
#!/bin/sh
echo "Hello Luckfox !"
Строка теста, начинающаяся на #!/ (так называемый shebang) это соглашение, говорящее системе о том, какой использовать интерпретатор для выполнения скрипта. В данном случае будет использоваться /bin/sh в качестве интерпретатора.
Вторая строка в этом файле использует команду echo для вывода текста "Hello Luckfox!" в стандартный вывод (обычно на экран терминала). Запуск этой команды в файле .sh эквивалентен непосредственному запуску команды в терминале.
3. Добавьте к этому файлу атрибут, разрешающий его выполнение как скрипта (execute permission):
4. Запустите скрипт на выполнение:
# ./luckfox.sh
Hello Luckfox !
[3. Настройка автостарта скрипта]
В директории /etc/init.d/ вы можете найти скрипты системы, относящиеся к её процессам запуска (startup) и завершения (shutdown).
# ls /etc/init.d/
S01seedrng S40network S99luckfoxconfigload
S01syslogd S49ntp S99luckfoxcustomoverlay
S02klogd S50sshd S99python
S02sysctl S50telnet S99rtcinit
S10udev S50usbdevice S99usb0config
S20linkmount S60micinit rcK
S20urandom S99_auto_reboot rcS
S21appinit S99hciinit
Когда система запускается, она сначала выполняет скрипт rcS, который в цикле выполняет ветвь сценариев старта (start branch) скриптов, у которых имена начинаются на S. Когда система завершает работу, она выполнит скрипт rcK, который подобным образом выполнит в цикле скрипты ветви останова (stop branch).
Чтобы добавить скрипт, который запустится при старте системы (system startup), выполните следующие шаги:
1. Создайте новый скрипт с именем, начинающимся на S??*, в директории /etc/init.d/.
S: обозначает скрипт ветви старта. ??: две цифры, которые задают приоритет запуска скрипта. Чем меньше число, тем выше приоритет скрипта. *: строка, которая описывает назначение скрипта.
2. Реализуйте в скрипте ветви выполнения start и stop. Например:
#!/bin/sh
case $1 in start) echo "start" ;; stop) echo "stop" ;; *) exit 1 ;; esac
3. Предоставьте файлу скрипта разрешение на выполнение:
4. При необходимости подстройте приоритет запуска системных скриптов:
# mv S99usb0config S90usb0config
# mv S99_auto_reboot S90_auto_reboot
5. Например, чтобы светодиодный индикатор оставался постоянно включенным после запуска, вы можете назвать крипт S99LED. Это гарантирует, что он будет выполняться последним за за системными сценариями (убедитесь, что нет ни одного скрипта, имя которого начинается с S99).
#!/bin/sh
GPIO_PIN=34 # Установит номер контакта GPIO, это пользовательский # светодиод на плате LuckFox Pico Mini.
case $1 in start) echo "Starting..." if [ ! -e /sys/class/gpio/gpio$GPIO_PIN ]; then echo $GPIO_PIN > /sys/class/gpio/export fi echo out > /sys/class/gpio/gpio$GPIO_PIN/direction echo 0 > /sys/class/gpio/gpio$GPIO_PIN/value echo "Started." ;;
stop) echo "Stopping..." if [ -e /sys/class/gpio/gpio$GPIO_PIN ]; then echo $GPIO_PIN > /sys/class/gpio/unexport fi echo "Stopped." ;;
*) echo "Usage: $0 {start|stop}" exit 1 ;; esac
В этом скрипте:
• Используется переменная GPIO_PIN, чтобы указать номер ввода GPIO. • В ветви скрипта start оператор проверки условия проверяет, был ли произведен экспорт вывода GPIO, чтобы избежать дублирования. • В ветви скрипта stop, оператор проверки условия выполняет отмену экспорта в том случае, когда этот вывод был экспортирован. • Производится проверка параметров скрипта для гарантии, что пользователь предоставил только параметры "start" или "stop" в качестве аргументов скрипта. Если предоставлены другие аргументы, то скрипт отобразит информацию об использовании (usage) и завершит скрипт (exit).
[4. Установка статического IP]
Если вы хотите установить статический IP-адрес для сервера, и избежать случайного назначения IP роутером, то вы можете применить настройку статического IP. Но перед этим убедитесь, что:
• Используете статический IP из той же подсети, что и ваш роутер, к которому подключаетесь. • Нет конфликта (дублирования) IP-адресов в подсети. Назначенный вами IP не должен попадать в диапазон адресов, которые назначает роутер.
Пример скрипта для установки статического IP:
#!/bin/sh
MAX_TRIES=10 TRIES=0
check_ip_address() { if ifconfig eth0 | grep -q "inet "; then return 0 else return 1 fi }
static_ip() { while [ $TRIES -lt $MAX_TRIES ]; do if check_ip_address; then echo "DHCP succeed!" ifconfig eth0 192.168.10.66 netmask 255.255.252.0 route add default gw 192.168.11.1 echo "nameserver 114.114.114.114" > /etc/resolv.conf ifconfig eth0 up break else echo "wait DHCP IP..." TRIES=$((TRIES + 1)) sleep 5 fi done
if [ $TRIES -eq $MAX_TRIES ]; then echo "error"
fi } case $1 in start) echo "start" static_ip ;; stop) echo "stop" ;; *) exit 1 ;; esac
В этом скрипте:
• Оператор ifconfig eth0 192.168.10.66 netmask 255.255.252.0 устанавливает настройку IP для сетевого интерфейса eth0. Отредактируйте эту строку (укажите IP-адрес и маску подсети) в соответствии с вашими требованиями. • Шлюз по умолчанию назначается строкой route add default gw 192.168.11.1, поменяйте её для указания правильного IP-адреса роутера, через который проходит трафик. Если вы не уверены, какой установить адрес, то используйте для проверки команды наподобие route -n.
[Ссылки]
1. LuckFox System Configuration site:wiki.luckfox.com. |