программирование сценариев bash
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
программирование сценариев bash
Это должен уметь каждый ... линуксоид
Но как показывают обсуждения и разговоры - это далеко не так.
Поэтому я помещаю здесь URL лучшего руководства по языку программирования bash:
http://www.opennet.ru/docs/RUS/bash_scripting_guide/
Искусство программирования на языке сценариев командной оболочки
Автор: Mendel Cooper
Перевод: Андрей Киселев
Есть много руководств по shell, но это (поверьте - по опыту) - лучшее, потому как:
- его очень легко использовать как справочное руководство под рукой...
- там много по-ходу совершенно нетривиальных примерчиков...
- и это замечательно сделанный перевод
(у меня вообще по русскоязычным книгам бумажным и русскоязычному интернет складывается впечатление, что есть переводы, сделанные Андреем Киселевым и ... все остальные переводы ).
P.S. мне понадобилось написать несколько скриптов, для измерения вот здесь: viewtopic.php?f=5&t=1531&p=2376#p2376 ... и забылись некоторые конструкции, я воспользовался этим справочником ... и вспомнил, что его есть смысл порекомендовать.
Но как показывают обсуждения и разговоры - это далеко не так.
Поэтому я помещаю здесь URL лучшего руководства по языку программирования bash:
http://www.opennet.ru/docs/RUS/bash_scripting_guide/
Искусство программирования на языке сценариев командной оболочки
Автор: Mendel Cooper
Перевод: Андрей Киселев
Есть много руководств по shell, но это (поверьте - по опыту) - лучшее, потому как:
- его очень легко использовать как справочное руководство под рукой...
- там много по-ходу совершенно нетривиальных примерчиков...
- и это замечательно сделанный перевод
(у меня вообще по русскоязычным книгам бумажным и русскоязычному интернет складывается впечатление, что есть переводы, сделанные Андреем Киселевым и ... все остальные переводы ).
P.S. мне понадобилось написать несколько скриптов, для измерения вот здесь: viewtopic.php?f=5&t=1531&p=2376#p2376 ... и забылись некоторые конструкции, я воспользовался этим справочником ... и вспомнил, что его есть смысл порекомендовать.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Программирование сценариев bash
... и раз уж речь зашла о bash ... (чтоб тему отдельно не заводить)...
то решил я вписать для памятки себе (и может ещё кому пригодится) несколько не очевидных приёмов работы с bash с консоли, ввод комбинаций, которые сильно ускоряют работу с командной строкой:
1. "дополнение командной строки" <Tab> ... ну, это все знают
Но вот то, что 2-х кратным <Tab><Tab> в начале командной строки выведет список всех команд - это упускается из виду ... ну, всех это многовато будет, но вот если забыл написание какой-то редко используемой команды (забыл как touch пишется ), то сильно помогает - вводим начальные символы команды (которые ещё помнятся) + <Tab> (или <Tab><Tab>):
2. история команд ... это тоже все знают :
Но здесь есть одна сильно интересная возможность: реверсивный поиск команд в истории bash - <Ctrl>+r : набираю последовательно <Ctrl>+r , v , p - и получаю полное написание команды подключения к одной из своих VPN-сетей:
- которую (команду) последний раз набирал месяца 2 назад и, конечно, не помню...
Обратите внимание, что символы, вводимые после <Ctrl>+r ищутся контекстным поиском в любом месте команды (не обязательно в начале! - см. как оно мне 'vpn' нашло ).
Последующее <Enter> после <Ctrl>+r , v , p - и найденная команда начинает выполняться.
то решил я вписать для памятки себе (и может ещё кому пригодится) несколько не очевидных приёмов работы с bash с консоли, ввод комбинаций, которые сильно ускоряют работу с командной строкой:
1. "дополнение командной строки" <Tab> ... ну, это все знают
Но вот то, что 2-х кратным <Tab><Tab> в начале командной строки выведет список всех команд - это упускается из виду ... ну, всех это многовато будет, но вот если забыл написание какой-то редко используемой команды (забыл как touch пишется ), то сильно помогает - вводим начальные символы команды (которые ещё помнятся) + <Tab> (или <Tab><Tab>):
Код: Выделить всё
[olej@notebook ~]$ t<Tab><Tab>
Display all 156 possibilities? (y or n)
t1libconfig tcpd texhash tiffinfo transmission
tabs tcpdump texlinks tiffmedian transmissioncli
tac tcpslice texsis tiffset transmission-remote
tagtool tcsh text2wave tiffsplit trap
tail tctmgr tfmtodit tifftopnm tree
tailf tctmttest tftopl time trial
talk tcttest tftp timeout troff
tangle tcucodec tgatoppm times true
tap2deb tcumttest tgz tload truncate
tap2rpm tcutest tha tmpwatch try-from
tapconvert teamviewer then tnameserv tset
tapdisk teamviewer6 thinkjettopbm toc2cddb tsort
tar tee thumbnail toc2cue ttusb_dec_reset
taskset tek2plot thumbpdf toe tty
tasque telinit thunar togglesebool tunctl
tbl telnet thunar-settings tomboy tune2fs
tc terminal thunar-volman tomboy-panel tunelp
tca_correct test thunderbird top tvtime
tcamgr test_chmLib tic torrentinfo-console tvtime-command
tcatest testdisk tickadj totem tvtime-configure
tcbmgr testlibraw tie totem-audio-preview tvtime-scanner
tcbmttest test-moniker tiff2bw totem-video-indexer twinkle
tcbtest testparm tiff2pdf totem-video-thumbnailer twistd
tcfmgr test_physfs tiff2ps touch type
tcfmttest test_ppa tiff2rgba tput typelib-dump
tcftest testrb tiffcmp tr typeset
tchmgr testsaslauthd tiffcp tracepath tzap
tchmttest test-speech tiffcrop tracepath6 tzselect
tchtest tex tiffdiff traceroute
tclsh texconfig tiffdither traceroute6
tclsh8.5 texconfig-dialog tiffdump transformdb
tcov texconfig-sys tifficc translate
Код: Выделить всё
[olej@notebook ~]$ history | tail -n10
992 ls -l
993 mv virtcd/ virtsd/
994 sudo mv virtcd/ virtsd/
995 ls -l
996 mc
997 t
998 history
999 history 997
1000 history --help
1001 history | tail -n10
Код: Выделить всё
(reverse-i-search)`vp': ssh olej@vpn
Обратите внимание, что символы, вводимые после <Ctrl>+r ищутся контекстным поиском в любом месте команды (не обязательно в начале! - см. как оно мне 'vpn' нашло ).
Последующее <Enter> после <Ctrl>+r , v , p - и найденная команда начинает выполняться.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Программирование сценариев bash
Эта же книга, которую я продолжаю считать лучшей по языку bash, размещена и здесь, на сайте: http://rus-linux.net/MyLDP/BOOKS/abs-gu ... -book.html ... чтоб далеко не ходитьOlej писал(а): Поэтому я помещаю здесь URL лучшего руководства по языку программирования bash:
http://www.opennet.ru/docs/RUS/bash_scripting_guide/
Искусство программирования на языке сценариев командной оболочки
Автор: Mendel Cooper
Перевод: Андрей Киселев
Есть много руководств по shell, но это (поверьте - по опыту) - лучшее, потому как:
Кроме всего прочего, размещение здесь хорошо форматировано, и удобно для чтения.
Re: Программирование сценариев bash
+1, действительно самая толковая книжка по bash, сам постоянно использую как справочник. Про перевод ничего не скажу, ибо предпочитаю читать в оригинале.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Программирование сценариев bash
Я здесь по случаю (совершенно другому) поместил пример на bash вычислительного приложения, совершенно не имеющего никакого отношения к самой операционной системе, и к её скриптам управления: сравнение языков программирования.Olej писал(а):Это должен уметь каждый ... линуксоид
Кстати, вспомнилось, что существует (GNU?) несколько больших (до 1000 строк) публичных проектов, написанных полностью на bash: в некоторых кругах это считается высшим пилотажем.
Re: Программирование сценариев bash
Скрипт шпаргалка - работа с цветом.
На rosettacode.org лежит скрипт (http://rosettacode.org/wiki/Terminal_co ... UNIX_Shell), который выводит лишь четыре примера:
rosettacode.sh
Вывод
Мне пример на Purebasic, там же, больше понравился. Переделал под shell :
Coloured_text.sh
Вывод:
На rosettacode.org лежит скрипт (http://rosettacode.org/wiki/Terminal_co ... UNIX_Shell), который выводит лишь четыре примера:
rosettacode.sh
Код: Выделить всё
#!/bin/bash
# Check if the terminal supports colour
# We should know from the TERM evironment variable whether the system
# is comfigured for a colour terminal or not, but we can also check the
# tput utility to check the terminal capability records.
COLORS=8 # Assume initially that the system supports eight colours
case $TERM in
linux)
;; # We know this is a colour terminal
rxvt)
;; # We know this is a colour terminal
*)
COLORS=`tput colors 2> /dev/null` # Get the number of colours from the termcap file
esac
if [ -z $COLORS ] ; then
COLORS=1 # Watch out for an empty returned value
fi
if [ $COLORS -le 2 ] ; then
# The terminal is not colour
echo "HW65000 This application requires a colour terminal" >&2
exit 252 #ERLHW incompatible hardware
fi
# We know at this point that the terminal is colour
# Coloured text
tput setaf 1 #red
echo "Red"
tput setaf 4 #blue
echo "Blue"
tput setaf 3 # yellow
echo "Yellow"
# Blinking
tput setab 1 # red background
tput setaf 3 # yellow foreground
#tput blink # enable blinking (but does not work on some terminals)
echo "Flashing text"
tput sgr0 # reset everything before exiting
Мне пример на Purebasic, там же, больше понравился. Переделал под shell :
Coloured_text.sh
Код: Выделить всё
#!/bin/bash
echo "Background color (tput setab N) N: 0 1 2 3 4 5 6 7 "
for Foreground in 0 1 2 3 4 5 6 7
do
echo -n "Foreground Color (tput setaf $Foreground) | "
tput setaf $Foreground
for Background in 0 1 2 3 4 5 6 7
do
echo -n "$(tput setab $Background)$Foreground$Background$(tput setab 9)"
done
echo ""
tput setaf 9
done
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Программирование сценариев bash
Команд (утилит) в составе современных дистрибутивов становится уже совсем много, и их не всегда удаётся упомнить.Olej писал(а): несколько не очевидных приёмов работы с bash с консоли, ввод комбинаций, которые сильно ускоряют работу с командной строкой:
1. "дополнение командной строки" <Tab> ... ну, это все знают
Но вот то, что 2-х кратным <Tab><Tab> в начале командной строки выведет список всех команд
А вот двойной <Tab> очень помогает в этом качестве. Типа вот такого:
Код: Выделить всё
olej@nvidia ~ $ a
Display all 110 possibilities? (y or n)
a2disconf apachectl arpd
a2dismod apg arping
a2dissite apgbfm as
a2enconf aplay asan_symbolize-3.5
a2enmod aplaymidi ascii-xfr
a2ensite apm_available aseqdump
a2p appletviewer aseqnet
a2query appres aspell
accept apropos aspell-autobuildhash
accessdb apt aspell-import
aclocal apt-add-repository assistant
aclocal-1.14 apt-cache atobm
aconnect apt-cdrom autoconf
acpi_available apt-clone autogen
acpid apt-config autoheader
acpi_listen aptd autom4te
add-apt-key aptdcon automake
add-apt-repository apt-extracttemplates automake-1.14
addgroup apt-file autoopts-config
addpart apt-ftparchive autoreconf
addr2line apt-get autoscan
add-remove-locales aptitude autoupdate
add-shell aptitude-create-state-bundle avahi-autoipd
adduser aptitude-curses avahi-browse
agetty aptitude-run-state-bundle avahi-browse-domains
alias apt-key avahi-daemon
alsa apt-mark avahi-publish
alsactl apt-sortpkgs avahi-publish-address
alsaloop apturl avahi-publish-service
alsamixer apturl-gtk avahi-resolve
alsaucm ar avahi-resolve-address
amidi arch avahi-resolve-host-name
amixer archdetect avahi-set-host-name
amuFormat.sh arecord avivotool
anacron arecordmidi awk
apache2 arm2hpdl axi-cache
apache2ctl arp
Но её написание просто элементарно восстановить с двойным <Tab>:
Код: Выделить всё
olej@nvidia ~ $ t
t1ascii tcltk-depends thunderbird transmission-gtk
t1asm tcpd tic transset
t1binary tcpdchk time trap
t1disasm tcpdmatch timedatectl tree
t1mac tcpdump timeout trial
t1unmac tdbbackup times troff
tabs tdbbackup.tdbtools tload true
tac tdbdump tnameserv truncate
tail tdbrestore toc2cddb trust
tailf tdbtool toc2cue try-from
tap2deb tee toe tset
tap2rpm telinit tomboy tsort
tapconvert telnet top tst_inactivity_timer
tar telnet.netkit toshsat1800-irdasetup ttfread
tarcat tempfile toshset tty
taskset tesseract touch tune2fs
tbl test tput tunelp
tbl-dctrl testparm tr twistd
tc testrb tracepath type
tcc testrb1.9.1 tracepath6 typeset
tclsh tgz traceroute tzconfig
tclsh8.5 then traceroute6 tzselect
tclsh8.6 thin-client-config-agent traceroute6.iputils
Код: Выделить всё
olej@nvidia ~ $ ta
tabs tail tap2deb tapconvert tarcat
tac tailf tap2rpm tar taskset
Код: Выделить всё
olej@nvidia ~ $ tap
tap2deb tap2rpm tapconvert
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Программирование сценариев bash
Сделали и выложили (май 2016г.) новый перевод последней (как утверждается) редакции документа Advanced Bash-Scripting Guide: Полный ABS Guide.pdf (поскольку это частный ресурс, кому нужно - скачайте сразу, обсуждение со ссылками найдёте здесь: http://www.linuxim.ru/viewtopic.php?f=83&t=810 , если ссылка для скачивания потеряется):sikmir писал(а):+1, действительно самая толковая книжка по bash, сам постоянно использую как справочник. Про перевод ничего не скажу, ибо предпочитаю читать в оригинале.
Mendel Cooper
Revision 10
10 Марта 2014
'PUBLICDOMAIN' release
Re: Программирование сценариев bash
Вот это здорово!!! Спасибо за наводкуOlej писал(а): Сделали и выложили (май 2016г.) новый перевод последней
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Программирование сценариев bash
Несколько свежих переводов на этом сайте относительно разных тонких особенностей языка bash:
В чем разница между одинарными и двойными кавычками в сценариях командной оболочки Bash?
В чем разница между Bash, Zsh и другими командными оболочками для Linux?
В чем разница между одинарными и двойными кавычками в сценариях командной оболочки Bash?
В чем разница между Bash, Zsh и другими командными оболочками для Linux?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей