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

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

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

Оффлайн nitrofox

  • Пользователь
  • **
  • Сообщений: 41
  • Репутация: +0/-0
  • Автор темы
Bash скрипты
« : 19 Июнь 2012, 01:57:51 »
1)Можно ли заставить скрипт ждать нажатие клавишы. Допустим при нажатии клавишы q чтобы сработала команда exit, при нажатии 1 другая    команда выполнилась
2)В такой конструкции netstat -an | egrep "80 .*LISTEN" что делает символ "|"  ?

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Bash скрипты
« Ответ #1 : 19 Июнь 2012, 02:03:06 »
2)В такой конструкции netstat -an | egrep "80 .*LISTEN" что делает символ "|"  ?
передает вывод netstat на вход команды egrep
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re:Bash скрипты
« Ответ #2 : 19 Июнь 2012, 08:31:13 »
Можно ли заставить скрипт ждать нажатие клавишы. Допустим при нажатии клавишы q чтобы сработала команда exit, при нажатии 1 другая    команда выполнилась
Вот один из способов
Код
read N
[ "$N" = q ] && exit
[ "$N" = 1 ] && Ваша_команда
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн nitrofox

  • Пользователь
  • **
  • Сообщений: 41
  • Репутация: +0/-0
  • Автор темы
Re:Bash скрипты
« Ответ #3 : 19 Июнь 2012, 18:54:38 »
read N
[ "$N" = q ] && exit
[ "$N" = 1 ] && Ваша_команда

Извините. Я чуток не правильно описал задачу.. Чтобы действие произошло сразу после нажатия кнопки.. Без надобности нажимать Enter.. Уже нашел read c параметром -n1. Огромное спасибо DdShurick и Pro. Я понимаю что задаю ламарские вопросы и спасибо что не игнорируете.. Просто много сайтов(2-3=)) перечитал по башу.. Но не на одном не нашел что делает знак "|" и функция read описывается скудно.. Негде не написано что у нее есть еще и параметры.

Все завершил свой первый скрипт 8). Дак еще он и работает как я и хотел. Правда выглядит страшно..

Код
#!/bin/sh
qqqq () {
if [ -e /opt/lampp/logs/httpd.pid ] && [ -e /proc/`cat /opt/lampp/logs/httpd.pid`/cmdline ]
then
httpdPid=`cat /opt/lampp/logs/httpd.pid`
httpdCmdLink=`cat /proc/$httpdPid/cmdline`
if [ $httpdCmdLink == "/opt/lampp/bin/httpd-kstart-DSSL-DPHP5-E/opt/lampp/logs/error_log" ]
then
echo "Apache работает PID:"$httpdPid
else
echo "Apache не работает"
fi
else
echo "Apache не работает"
fi





##==========
stringg="/opt/lampp/var/mysql/"`/bin/hostname`".pid"


if [ -e $stringg ] && [ -e /proc/`cat $stringg`/cmdline ]
then
mySqlPid=`cat $stringg`
mySqlCmdLink=`cat /proc/$mySqlPid/cmdline`

if [ $mySqlCmdLink == "/opt/lampp/sbin/mysqld--basedir=/opt/lampp--datadir=/opt/lampp/var/mysql--plugin-dir=/opt/lampp/lib/mysql/plugin--user=nobody--log-error=/opt/lampp/var/mysql/puppyrus.err--pid-file=/opt/lampp/var/mysql/puppyrus.pid--socket=/opt/lampp/var/mysql/mysql.sock--port=3306" ]
then
echo "MySql работает PID:"$mySqlPid
else
echo "MySql не работает"
fi
else
echo "MySql не работает"
fi



printf "
===================================================
|Запуск Lampp    |1
|Остановка Lampp |2
|Перезапуск Lampp|3
---------------------------------------------------
|Обновить        |r
|Выход           |q
===================================================
 Введите цифру:"
read -n1 var1
clear
printf "\n===================================================\n"

case "$var1" in
  "1" )  /opt/lampp/lampp start;;
  "2" )  /opt/lampp/lampp stop;;
  "3" )  /opt/lampp/lampp restart;;
  "r" )  clear
  qqqq;;
  "q" )  exit;;
 esac #
printf "===================================================\n"
read -sn1 -p "Press any key to continue...";
clear
qqqq
}

qqqq

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1708
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re:Bash скрипты
« Ответ #4 : 02 Июль 2012, 23:31:25 »
Извиняюсь, что не в тему, но название топика подходит

Сочинил нехитрый инструмент для расчленения файловой системы debian-образных
дистрибутивов на составляющие пакеты. Пример использования:

# ubu-strip.sh /mnt/sda3/a/casper/filesystem /mnt/sda3/ubuntu-stripped

В данном примере в каталоге /mnt/sda3/a/casper/filesystem у меня находится
распакованная (из squashfs) файловая система ubuntu. Что передается
скрипту, как 1й параметр из командной строки. 2й параметр - /mnt/sda3/ubuntu-stripped
это место, где будут создаваться директории с пакетами, входящими в состав.
После их можно преобразовать в православный .pet, но я этим еще не занимался.

Должно работать и с установленной убунтой и отлавливать установленные apt-ом пакеты.
Избыточности, чего я опасался, не должно получаться.

За бредовую идею спасибо for shelezyaka

P.S. концептуально код похож на задницу, не обижайтесь - я с бейсика начинал)
« Последнее редактирование: 02 Июль 2012, 23:43:19 от imp »
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:Bash скрипты
« Ответ #5 : 03 Июль 2012, 09:17:30 »
Начало интересное. Напомнило /usr/local/remove из lupurus520. А что в итоге ? Напихать в Gaff и собрать Ричи-deb ?
можно преобразовать в православный .pet
Раз уж все делается с нуля - может попробовать идею которая уже несколько раз всплывала: .sfs вместо .pet и вообще без базы.sfs , Gaff-Woof... Эксперименты так - эксперименты :)

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1708
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re:Bash скрипты
« Ответ #6 : 03 Июль 2012, 09:56:45 »
А что в итоге ? Напихать в Gaff и собрать Ричи-deb ?
Раз уж все делается с нуля - может попробовать идею которая уже несколько раз всплывала: .sfs вместо .pet и вообще без базы.sfs , Gaff-Woof...

Что с этим делать - это уж каждому для себя решать. Кому, может и не нужно,
а кто и найдет интересное применение.Потому и:

их можно преобразовать в православный .pet, но я этим еще не занимался.

Эксперименты так - эксперименты

Ну, дык! :)
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн bicyclist56

  • Ветеран
  • *****
  • Сообщений: 502
  • Репутация: +20/-1
  • Не дай мозгам засохнуть!
    • Мой блог
Re:Bash скрипты
« Ответ #7 : 03 Июль 2012, 12:13:20 »
В порядке тренировки в Иванну SE2 добавил evince, взяв ее папку из разложенной с помощью скрипта на пакеты Убунты:
сделал из папки PET, установил его, проверил ldd, чего не хватает (оказалось, всего пары библиотек), затем удалил PET, добавил в исходную папку те две lib'ы, а также файл /usr/share/locale/ru/LC_MESSAGES/evince.mo, вновь собрал, установил, работает.
Конечно, при большом количестве зависимостей потрудиться придется, но если сильно захотеть... :)
Спасибо за скрипт!
Неттоп Eglobal Intel Core i5 3317U 8 GB RAM 128 GB SSD + 120 GB SSD, Slax 9

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1708
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re:Bash скрипты
« Ответ #8 : 03 Июль 2012, 13:01:18 »
Скрипт берет данные о содержимом пакета в /var/lib/dpkg/info
Потому вырезается только пакет без зависимостей. Так же как и сборка из исходников -
для zoneminder, допустим, надо отдельно еше туеву хучу пакетов собрать.
Можно, конечно придумать чего либо для отслеживания и подтягивания зависимостей,
но тогда получится большая избыточность в виде дубликатов половины ФС для
каждого пакета - у вас при полной распаковке места на винте не хватит.
Хотя в таком случае можно "вырезать" по одному конкретному пакету со всеми вытекающими
и добавить стрип дубликатов из ФС puppy. Не знаю, когда займусь - работы куча.
И кто знает, получится ли.

Да, еще для подтягивания библиотек можно (я пробовал) сделать вывод ldd в файл
(катит только для бинарников, перл и питон - не получится) и считывая с него
построчно, копировать библиотеки из ФС донора куда-либо. Лучше не копировать сразу в файловую систему - неизвестно, какие бока полезут, а сделать модуль, подключить и проверить. На сем пока что мои соображения заканчиваются.
Если есть идеи - давайте разберемся.
« Последнее редактирование: 03 Июль 2012, 13:11:59 от imp »
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн bicyclist56

  • Ветеран
  • *****
  • Сообщений: 502
  • Репутация: +20/-1
  • Не дай мозгам засохнуть!
    • Мой блог
Re:Bash скрипты
« Ответ #9 : 03 Июль 2012, 13:28:14 »
Такую мелочь, как evince, можно найти и готовую. А вот какие-нибудь редкие программы вытаскивать, установив их в Убунте (главное, и все зависимости автоматом!), а потом (даже в отсутствии интернета) пытаться сделать SFS для Пуппи - можно заняться... если времени не жалко :) И конечно, только SFS делать, да еще в копии ОС, пока не заработает как следует!
Неттоп Eglobal Intel Core i5 3317U 8 GB RAM 128 GB SSD + 120 GB SSD, Slax 9

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:Bash скрипты
« Ответ #10 : 03 Июль 2012, 13:37:22 »
для подтягивания библиотек можно (я пробовал) сделать вывод ldd в файл
(катит только для бинарников) и считывая с него
построчно, копировать библиотеки из ФС донора в модуль
Такой скрипт более интересен. В .deb много лишнего. Т.е автоматизировать выдирание из рабочей системы. Установку проводить в донорской системе штатно. Переписывать apt нет смысла.

Возможно, поможет
underdog=sda9           Монтировать весь Линукс дистрибутив с раздела sda9 под Puppy
« Последнее редактирование: 03 Июль 2012, 13:38:59 от sfs »