категории | RSS
  

Bash-скриптинг на устройствах под управлением ОС Android: первые шаги

Добрый день.

Все мы (ну или почти все) когда-то пользовались смартфонами под управлением ОС Symbian. Многим из нас не хватало функционала уже существующего ПО, и тогда на смартфоне появлялся Python и множество самописных программ на нём же. Такие программы назывались скриптами, а написать скрипт мог любой желающий, вооружившись одним лишь текстовым редактором.

Теперь же многие из нас обзавелись смартфонами, управляемыми ОС Android, которая, как известно, создана на базе ядра Linux.
А одной из отличительных особенностей GNU/Linux является bash — одна из наиболее популярных современных разновидностей командной оболочки UNIX.

Цитата: Advanced Bash-Scripting Guide
Shell — это командная оболочка. Но это не просто промежуточное звено между пользователем и операционой системой, это еще и мощный язык программирования. Программы на языке shell называют сценариями, или скриптами. Фактически, из скриптов доступен полный набор команд, утилит и программ Unix. Если этого недостаточно, то к вашим услугам внутренние команды shell — условные операторы, операторы циклов и пр., которые увеличивают мощь и гибкость сценариев. Shell-скрипты исключительно хороши при программировании задач администрирования системы и др., которые не требуют для своего создания полновесных языков программирования.


Вооружаемся всем необходимым:
  • во-первых, нам нужно получить права пользователя root;
  • во-вторых, нам нужен эмулятор терминала — этот (требует Android 1.5+) или любой другой;
  • в-третьих, нам нужен BusyBox — набор UNIX-утилит командной строки — этот (требует Android 1.6+) или любой другой;
  • в-четвёртых, нам пригодится текстовый редактор — этот (требует Android 1.6+) или любой другой.

Опционально можно поставить модифицированный bash , положив его в
/system/bin/
.

Итак, весь необходимый софт установлен. Запустив эмулятор терминала, попробуем выполнить какую-нибудь команду, например, посмотрим информацию о системе:
sh-4.1$ uname -a
Linux localhost 2.6.35.7-CL709629 #10 PREEMPT Fri Apr 13 18:06:10 IST 2012 armv7l GNU/Linux

Особой пользы нам эта команда не принесла, попробуем выполнить что-нибудь более полезное.

Подробнее о командах вы можете узнать, например, в том же самом Advanced Bash-Scripting Guide или спросить у наших линуксоидов .

Наверное, сейчас нам пригодится новый пароль из, допустим, 30 случайно взятых символов (букв, цифр и знаков препинания):
sh-4.1$ tr -cd '[:punct:]+[:alnum:]' < /dev/urandom | fold -w30 | head -n1
{EMn!v'u<AqcAH'YD/U6bQ?>dS!W^d
 Скриншот

Как вы уже догадались, довольно неудобно каждый раз вводить в терминале такую команду. Поэтому, чуть-чуть изменив текст, мы создадим скрипт, который генерирует пароль указанной пользователем длины и НВПС сохраняет его в текстовый файл:
#!/system/bin/bash

tr -cd '[:punct:]+[:alnum:]' < /dev/urandom | fold -w $1 | head -n1 > /sd/pwd.txt
echo "Check /mnt/sdcard/external_sd/pwd.txt"
 Скриншот

Скрипт написан и сохранён. Пытаемся его выполнить, но результат не радует:
sh-4.1$ /sd/pwg.sh 15
sh: /sd/pwg.sh: Permission denied

А всё потому, что у нас карта памяти отформатирована в файловой системе FAT. (Есть предположение, что на носителе с файловой системой ext4 всё заработает искаропки). Посему кладём наш скрипт в
/system/xbin/
, не забыв после этого разрешить системе его выполнение командой
chmod 777 /system/xbin/pwg.sh
или с помощью вашего любимого файл-менеджера.

Запускаем скрипт:
sh-4.1$ pwg.sh 50
Check /mnt/sdcard/external_sd/pwd.txt
 Скриншот

Всё работает, задача выполнена.

 Скриншот

Бонус: можно заставить систему выполнять скрипт при загрузке, о чём подробнее написано здесь .

The End.


DimonVideo
2012-04-24T23:29:15Z
Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 9

#9   Vinogradof    

..дружно ищем fork bomb и понимаем смысл отличного скрипта на баше.. =)

кстати, на андроиде такое не должно прокатить, там слишком малые ограничения выставлены


0 ответить

#9   SQR    

Вот отличный скрипт на баше:

:(){ :|:& };:

Может кому пригодится smile


0 ответить

#9   Kopol-xpoh    

dimy44
Насчет активного развития- посмотрите в сторону SL4A, там, кстати, не только питон поддерживается, на нашем сайте тоже тема есть
Стоит у меня SL4A, про поддержку других скриптовых языков в курсе. После освоения shell думаю попробовать свои силы в Perl: знаменитый скрипт из одной строки, регэкспы и всё такое...


0 ответить

#9   Zaterehniy    

да я выкладывал на питон написанную. сшел он и есть сшел. спасибо за статью. ругаться не надо товарищи типа "почему тут генератор пароля?". Статья подразумевает что читать ее будет технически осведомленный человек, посмотрев простой пример легко сделает нужное для себя. Это просто пример.
-------------
Добавлено в 00.13: скажу больше - заинтересованных тут нет вообще. тема мертвая. да и к тому же плюс питона на смарте был в возможности писать на нем же. а сейчас пиши себе хоть на ява без пк.


1 ответить

#9   dimy44    

Направление разработки? Не виделв обменнике ни одной программмына Python для ведроида. К чему быэто?
одна есть). Другое дело, что это пишется для личного пользования, ибо, все, что можно, на джаве уже написано. Преимущество- скорость разработки, уже можно прямо на смарте упаковать, доступ ко многим системным функциям. Насчет активного развития- посмотрите в сторону SL4A, там, кстати, не только питон поддерживается, на нашем сайте тоже тема есть, правда уже не те времена, заинтересованных в этом здесь мало осталось.


* редактировал(а) dimy44 11:29 27 апр 2012

1 ответить

#9   Kopol-xpoh    

dimy44
Все-же, при всем уважении к shell, мне кажется, у python на Android возможностей побольше будет
Правильно кажется. При сравнении возможностей полноценного языка программирования, который поддерживает ООП, и языка управления системой преимущество будет не у последнего.
Зато он значительно проще. Например, чтобы с помощью питона оценить общий размер папки \"/sd/Books\", нужно будет рекурсивно пройтись по ней, сложить размеры всех лежащих в ней файлов и вывести. Или же выполнить команду \"du /sd/Books/\". И т.д, и т.п.
Плюс shell интегрирован в систему в отличие от Python — сколько времени займёт у среднего пользователя написание на питоне полнофункционального аналога программы \"mount\" или \"ifconfig\"?

dimy44
к тому же это направление активно развивается.
Направление разработки? Не видел в обменнике ни одной программмы на Python для ведроида. К чему бы это?
Если ошибаюсь, поправьте.


Camogyp
А зачем нам пригодится новый пароль такой?
Например, можно не отходя от кассы сменить свой старый относительно простой пароль на относительно сложный новый...


0 ответить

#9   Vinogradof    

Куда более полезные команды в терминале su, chmod, chown, cp, cat, logcat, dmesg, grep, mount, df и прочие.. Лучше бы на примере их показал, а не генерация ни кому не нужного пароля.
к примеру вот жизненная ситуация, необходимо из терминала произвести действия над файлами из system, но он только на чтение... (к примеру с компа через adb, ну так удобнее делать всё, нежели на самом телефоне каким-нить SU файл менеджером):
abd shell mount -o rw, remount -t yaffs2 /dev/block/mtdblock3 /system
тоже самое можно выполнить и в терминале на самом телефоне, только убрать в начале adb shell

можно поглядеть сколько осталось места да ничках, как разбиты они (например для HTC, если забыли какой поставили hboot), достаточно набрать df
ну и так далее, более жизненные ситуации показать, а то генерация пароля.. =)


0 ответить

#9   Camogyp    

А зачем нам пригодится новый пароль такой?winked


0 ответить

#9   dimy44    

Все-же, при всем уважении к shell, мне кажется, у python на Android возможностей побольше будет, к тому же это направление активно развивается. А shell... Ну, конечно, имеет место быть, но, честно говоря, не впечатлило. Это всего-лишь имхо, за статью спасибо.


0 ответить

Напомнить пароль