notify-send
При помощи утилиты notify-send вы можете показывать всплывающие уведомления путём отправки сообщений через notification daemon из командной строки. Очень удобный способ сообщать пользователям о каких-то событиях. Прежде, чем вы сможете воспользоваться этой утилитой, её необходимо установить, поскольку обычно она не установлена по умолчанию. В Ubuntu программа устанавливается так:
$ sudo apt-get install libnotify-bin
Теперь можно отправлять уведомления прямиком на рабочий стол пользователю:
$ notify-send "rsnapshot done :)"
Также notify-send принимает опции, при помощи которых можно управлять отображением. С ними можно ознакомиться на man-странице программы.
tput
При помощи утилиты tput вы можете получить дополнительные возможности при работе с терминалом, такие как:
- перемещение курсора в любую позицию экрана;
- получение информации о терминале;
- установка цвета символов и фона;
- печать жирным шрифтом;
- печать в инверсном режиме и т. п.
#!/bin/bash # clear the screen tput clear # Move cursor to screen location X,Y (top left is 0,0) tput cup 3 15 # Set a foreground colour using ANSI escape tput setaf 3 echo "XYX Corp LTD." tput sgr0 tput cup 5 17 # Set reverse video mode tput rev echo "M A I N - M E N U" tput sgr0 tput cup 7 15 echo "1. User Management" tput cup 8 15 echo "2. Service Management" tput cup 9 15 echo "3. Process Management" tput cup 10 15 echo "4. Backup" # Set bold mode tput bold tput cup 12 15 read -p "Enter your choice [1-4] " choice tput clear tput sgr0 tput rc
Вот, что получится в результате:
Если вас заинтересовали возможности tput, вы можете получить больше информации на страницах man tput и man 5 terminfo.
setleds
При помощи команды setleds вы можете включать/отключать светодиоды клавиатуры. Например, чтобы включить Num Lock:
setleds -D +num
отключить Num Lock:
setleds -D -num
И, соответственно:
- +caps — включить Caps Lock;
- -caps — отключить Caps Lock;
- +scroll — включить Scroll Lock;
- -scroll — отключить Scroll Lock.
Более подробно о возможностях setleds можно узнать из man setleds.
zenity
При помощи zenity вы можете отображать GTK-диалоги и получать обратно ответы пользователя. Ниже приведён пример использования zenity в сценарии получения whois-информации.
#!/bin/bash # Get domain name _zenity="/usr/bin/zenity" _out="/tmp/whois.output.$$" domain=$(${_zenity} --title "Enter domain" \ --entry --text "Enter the domain you would like to see whois info" ) if [ $? -eq 0 ] then # Display a progress dialog while searching whois database whois $domain | tee >(${_zenity} --width=200 --height=100 \ --title="whois" --progress \ --pulsate --text="Searching domain info..." \ --auto-kill --auto-close \ --percentage=10) >${_out} # Display back output ${_zenity} --width=800 --height=600 \ --title "Whois info for $domain" \ --text-info --filename="${_out}" else ${_zenity} --error \ --text="No input provided" fi
Так это выглядит в работе:
С полным перечнем поддерживаемых виджетов GTK+, а также справкой по работе с zenity можно ознакомиться на man-странице программы, а также при помощи команды
zenity --help
kdialog
kdialog подобен zenity, однако он использует возможности библиотеки QT, а не GTK+. Пример использования:
kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."
На странице shell scripting with KDE Dialogs можно получить больше информации о работе с kdialog.
dialog
При помощи dialog вы можете создавать пользовательский интерфейс в терминале, используя возможности библиотеки ncurses. Например:
#!/bin/bash dialog --title "Delete file" \ --backtitle "Linux Shell Script Tutorial Example" \ --yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60 # Get exit status # 0 means user hit [yes] button. # 1 means user hit [no] button. # 255 means user hit [Esc] key. response=$? case $response in 0) echo "File deleted.";; 1) echo "File not deleted.";; 255) echo "[ESC] key pressed.";; esac
Подробности о работе с dialog — на man-странице программы.
Помимо рассмотренных выше утилит, предоставляющих возможность построения пользовательских интерфейсов, со многими UNIX/Linux поставляются и другие. Некоторые из них:
- xmessage — умеет выводить диалоги с кнопками и сообщениями;
- gmessage — GTK+ аналог xmessage;
- whiptail — похожа на dialog;
- python-dialog — dialog-модуль для Python.
logger
Утилита logger представляет собой интерфейс к syslog. При помощи этой программы вы можете отправлять сообщения о событиях для регистрации в системном лог-файле или каком-либо другом.
$ logger "Hello World" $ tail /var/log/messages Jan 11 15:11:19 adesktop ashep: Hello World
За справкой традиционно обращайтесь к man logger.
setterm
При помощи утилиты setterm можно управлять различными параметрами терминала. В приведённом ниже примере устанавливается время гашения экрана монитора равным 15 минутам, а переключение в энергосберегающий режим — 60:
setterm -blank 15 -powersave powerdown -powerdown 60
В следующем примере текст в xterm будет выведен подчёркнутым:
setterm -underline on; echo "Add Your Important Message Here" setterm -underline off
Также, например, вы можете отключить отображение курсора на экране:
setterm -cursor off
и затем включить его:
setterm -cursor on
За подробностями по работе с программой — man setterm.
Отправка сообщений хостам MS Windows
При помощи утилиты smbclient можно отправлять текстовые сообщения пользователям хостов SMB/CIFS, если на них запущена соответствующая служба.
echo "Hello World" | smbclient -M hostname
Документация: man smbclient.
Работа с сокетами из bash
Непосредственно из bash вы можете открывать сокеты и передавать через них данные. Вам вовсе необязательно пользоваться curl или lynx, чтобы получить данные по сети от удалённого сервера. Bash особым образом интерпретирует обращения к файлам:
- /dev/tcp/host/port — если host является корректным именем хоста, а port — номером порта, то bash попытается открыть сетевое соединение к этому хосту на указанный TCP-порт;
- /dev/udp/host/port — то же самое, только речь идёт о UDP-соединениях.
(echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"
Обернув вышеприведённый пример в цикл, можно проверять диапазон портов:
echo "Scanning TCP ports..." for p in {1..1023} do (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open" done
А при помощи следующего примера можно сделать так, чтобы ваш сценарий работал подобно HTTP-клиенту.
#!/bin/bash exec 3 <> /dev/tcp/${1:-www.cyberciti.biz}/80 printf "GET / HTTP/1.0\r\n" >&3 printf "Accept: text/html, text/plain\r\n" >&3 printf "Accept-Language: en\r\n" >&3 printf "User-Agent: nixCraft_BashScript v.%s\r\n" "${BASH_VERSION}" >&3 printf "\r\n" >&3 while read LINE <&3 do # do something on $LINE # or send $LINE to grep or awk for grabbing data # or simply display back data with echo command echo $LINE done
Больше информации, как всегда, вы можете получить на man-странице bash.
Замечание о заданиях cron и GUI-приложениях
Если вы планируете запускать ваши сценарии, написанные с использованием Zenity или ей подобными, не забывайте прежде определять значение переменной DISPLAY в строке описания задания файла crontab. Например:
@hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh
Комментариев нет:
Отправить комментарий