0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

10 個增加 UNIX/Linux Shell 腳本趣味的工具

Linux愛好者 ? 來源:未知 ? 作者:李倩 ? 2018-04-11 16:21 ? 次閱讀

有些誤解認為 shell 腳本僅用于 CLI 環(huán)境。實際上在 KDE 或 Gnome 桌面下,你可以有效的使用各種工具編寫 GUI 或者網(wǎng)絡(luò)(socket)腳本。shell 腳本可以使用一些 GUI 組件(菜單、警告框、進度條等),你可以控制終端輸出、光標位置以及各種輸出效果等等。利用下面的工具,你可以構(gòu)建強壯的、可交互的、對用戶友好的 UNIX/Linux bash 腳本。

制作 GUI 應(yīng)用不是一項困難的任務(wù),但需要時間和耐心。幸運的是,UNIX 和 Linux 都帶有大量編寫漂亮 GUI 腳本的工具。以下工具是基于 FreeBSD 和 Linux 操作系統(tǒng)做的測試,而且也適用于其他類 UNIX 操作系統(tǒng)。

1、notify-send 命令

notify-send 命令允許你借助通知守護進程發(fā)送桌面通知給用戶。這種避免打擾用戶的方式,對于通知桌面用戶一個事件或顯示一些信息是有用的。在 Debian 或 Ubuntu 上,你需要使用 apt 命令 或 apt-get 命令 安裝的包:

sudo apt-get install libnotify-bin

CentOS/RHEL 用戶使用下面的 yum 命令:

sudo yum install libnotify

Fedora Linux 用戶使用下面的 dnf 命令:

`$ sudo dnf install libnotify`

In this example, send simple desktop notification from the command line, enter:

### 發(fā)送一些通知 ###

notify-send "rsnapshot done :)"

示例輸出:

notify-send: Shell Script Get Or Send Desktop Notifications

下面是另一個附加選項的代碼:

...

alert=18000

live=$(lynx --dump http://money.rediff.com/ | grep 'BSE LIVE' | awk '{ print $5}' | sed 's/,//g;s/.[0-9]*//g')

[ $notify_counter -eq 0 ] && [ $live -ge $alert ] && { notify-send -t 5000 -u low -i "BSE Sensex touched 18k"; notify_counter=1; }

...

示例輸出:

Linux / UNIX: Display Notifications From Your Shell Scripts With notify-send

這里:

-t 5000:指定超時時間(毫秒) (5000 毫秒 = 5 秒)

-u low: 設(shè)置緊急等級 (如:低、普通、緊急)

-i gtk-dialog-info: 設(shè)置要顯示的圖標名稱或者指定的圖標(你可以設(shè)置路徑為:-i /path/to/your-icon.png)

關(guān)于更多使用notify-send功能的信息,請參考 man 手冊。在命令行下輸入man notify-send即可看見:

man notify-send

2、tput 命令

tput命令用于設(shè)置終端特性。通過tput你可以設(shè)置:

在屏幕上移動光標。

獲取終端信息。

設(shè)置顏色(背景和前景)。

設(shè)置加粗模式。

設(shè)置反轉(zhuǎn)模式等等。

下面有一段示例代碼:

#!/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

示例輸出:

Linux / UNIX Script Colours and Cursor Movement With tput

關(guān)于tput命令的詳細信息,參見手冊:

man 5 terminfo

man tput

3、setleds 命令

setleds 命令允許你設(shè)置鍵盤燈。下面是打開數(shù)字鍵燈的示例:

setleds -D +num

關(guān)閉數(shù)字鍵燈,輸入:

setleds -D -num

-caps:關(guān)閉大小寫鎖定燈

+caps:打開大小寫鎖定燈

-scroll:關(guān)閉滾動鎖定燈

+scroll:打開滾動鎖定燈

查看setleds手冊可看見更多信息和選項man setleds。

4、zenity 命令

zenity 命令顯示 GTK+ 對話框,并且返回用戶輸入。它允許你使用各種 Shell 腳本向用戶展示或請求信息。下面是一個whois指定域名目錄服務(wù)的 GUI 客戶端示例。

#!/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

示例輸出:

zenity: Linux / UNIX display Dialogs Boxes From The Shell Scripts

參見手冊獲取更多zenity信息以及其他支持 GTK+ 的組件:

zenity --help

man zenity

5、kdialog 命令

kdialog 命令與 zenity 類似,但它是為 KDE 桌面和 QT 應(yīng)用設(shè)計。你可以使用 kdialog 展示對話框。下面示例將在屏幕上顯示信息:

kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."

示例輸出:

Kdialog: Suppressing the display of a dialog

6、Dialog

Dialog 是一個使用 Shell 腳本的應(yīng)用,顯示用戶界面組件的文本。它使用 curses 或者 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 dialog。

關(guān)于其他用戶界面工具的注意事項

UNIX、Linux 提供了大量其他工具來顯示和控制命令行中的應(yīng)用程序,shell 腳本可以使用一些 KDE、Gnome、X 組件集:

gmessage- 基于 GTK xmessage 的克隆

xmessage- 在窗口中顯示或詢問消息(基于 X 的 /bin/echo)

whiptail- 顯示來自 shell 腳本的對話框

python-dialog- 用于制作簡單文本或控制臺模式用戶界面的 Python 模塊

7、logger 命令

logger命令將信息寫到系統(tǒng)日志文件,如:/var/log/messages。它為系統(tǒng)日志模塊 syslog 提供了一個 shell 命令行接口

logger "MySQL database backup failed."

tail -f /var/log/messages

logger -t mysqld -p daemon.error "Database Server failed"

tail -f /var/log/syslog

示例輸出:

Apr 20 00:11:45 vivek-desktop kernel: [38600.515354] CPU0: Temperature/speed normal

Apr 20 00:12:20 vivek-desktop mysqld: Database Server failed

可以查看 logger 手冊獲取詳細信息:man logger

8、setterm 命令

setterm 命令可設(shè)置不同的終端屬性。下面的示例代碼會強制屏幕在 15 分鐘后變黑,監(jiān)視器則 60 分鐘后待機。

setterm -blank 15 -powersave powerdown -powerdown 60

下面的例子將 xterm 窗口中的文本以下劃線展示:

setterm -underline on;

echo "Add Your Important Message Here"

setterm -underline off

另一個有用的選項是打開或關(guān)閉光標顯示:

setterm -cursor off

打開光標:

setterm -cursor on

參見 setterm 命令手冊獲取詳細信息:man setterm

9、smbclient:給 MS-Windows 工作站發(fā)送消息

smbclient 命令可以與 SMB/CIFS 服務(wù)器通訊。它可以向 MS-Windows 系統(tǒng)上選定或全部用戶發(fā)送消息。

smbclient -M WinXPPro <

Message 1

Message 2

...

..

EOF

echo "${Message}" | smbclient -M salesguy2

參見 smbclient 手冊:man smbclient

10、Bash 套接字編程

在 bash 下,你可以打開一個套接字并通過它發(fā)送數(shù)據(jù)。你不必使用curl或者lynx命令抓取遠程服務(wù)器的數(shù)據(jù)。bash 和兩個特殊的設(shè)備文件可用于打開網(wǎng)絡(luò)套接字。以下選自 bash 手冊:

/dev/tcp/host/port- 如果host是一個有效的主機名或者網(wǎng)絡(luò)地址,而且端口是一個整數(shù)或者服務(wù)名,bash 會嘗試打開一個相應(yīng)的 TCP 連接套接字。

/dev/udp/host/port- 如果host是一個有效的主機名或者網(wǎng)絡(luò)地址,而且端口是一個整數(shù)或者服務(wù)名,bash 會嘗試打開一個相應(yīng)的 UDP 連接套接字。

你可以使用這項技術(shù)來確定本地或遠程服務(wù)器端口是打開或者關(guān)閉狀態(tài),而無需使用nmap或者其它的端口掃描器。

# find out if TCP port 25 open or not

(echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"

下面的代碼片段,你可以利用 bash 循環(huán)找出已打開的端口:

echo "Scanning TCP ports..."

for p in {1..1023}

do

(echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"

done

示例輸出:

Scanning TCP ports...

22 open

53 open

80 open

139 open

445 open

631 open

下面的示例中,你的 bash 腳本將像 HTTP 客戶端一樣工作:

#!/bin/bash

exec 3<> /dev/tcp/${1:-www.cyberciti.biz}/80

printf "GET / HTTP/1.0 " >&3

printf "Accept: text/html, text/plain " >&3

printf "Accept-Language: en " >&3

printf "User-Agent: nixCraft_BashScript v.%s " "${BASH_VERSION}" >&3

printf " " >&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

參見 bash 手冊獲取更多信息:man bash

關(guān)于 GUI 工具和 cron 任務(wù)的注意事項

如果你 使用 crontab 來啟動你的腳本,你需要使用 export DISPLAY=[用戶機器]:0 命令請求本地顯示或輸出服務(wù)。舉個例子,使用 zenity 工具調(diào)用/home/vivek/scripts/monitor.stock.sh:

@hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh

你有喜歡的可以增加 shell 腳本趣味的 UNIX 工具么?請在下面的評論區(qū)分享它吧。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

    208460
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    632

    瀏覽量

    39429

原文標題:10 個增加 UNIX/Linux Shell 腳本趣味的工具

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux Shell腳本入門到實戰(zhàn)詳解

    Linux Shell腳本入門到實戰(zhàn)詳解
    發(fā)表于 02-17 15:03 ?602次閱讀

    Linux shell腳本分享

    今天浩道跟大家分享幾個Linux運維中常用到的shell腳本!
    發(fā)表于 07-18 09:53 ?535次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>分享

    100Linux Shell腳本總結(jié)

    不知道大家有沒有發(fā)現(xiàn),會編寫shell腳本的運維,工資不會低,并且他的工作會很輕松!今天浩道跟大家分享每一Linux運維應(yīng)知必會的100
    的頭像 發(fā)表于 12-05 09:28 ?1039次閱讀

    linux shell命令/unix shell命令教程

    linux shell命令/unix shell命令教程:為了防止未授權(quán)用戶訪問你的文件,可以在文件和目錄上設(shè)置權(quán)限位。還可以設(shè)定文件在創(chuàng)建時所具有的缺省權(quán)限:這些只是整個系統(tǒng)安全問題
    發(fā)表于 12-06 13:08 ?61次下載
    <b class='flag-5'>linux</b> <b class='flag-5'>shell</b>命令/<b class='flag-5'>unix</b> <b class='flag-5'>shell</b>命令教程

    如何創(chuàng)建和執(zhí)行一簡單的Linux shell腳本

     如果您愿意要嘗試更長的shell腳本,請將下面的shell腳本(并附加為PDF和ODT文件)復(fù)制到文本編輯器中,保存,使其可執(zhí)行并運行。當您了解更多
    的頭像 發(fā)表于 11-06 17:28 ?1.3w次閱讀

    Linux系統(tǒng)命令及shell腳本實踐指南

    Linux系統(tǒng)命令及shell腳本實踐指南資料下載。
    發(fā)表于 06-01 14:47 ?28次下載

    109實用shell腳本分享

    Shell腳本,就是利用Shell的命令解釋的功能,對一純文本的文件進行解析,然后執(zhí)行這些功能,也可以說Shell
    的頭像 發(fā)表于 03-16 08:58 ?2542次閱讀

    Linux開發(fā)_Makefile規(guī)則與Shell腳本語言

    介紹Linux下Makefile編程知識點,Shell腳本知識點。
    的頭像 發(fā)表于 09-17 15:40 ?1189次閱讀

    Linux命令行與shell腳本編寫

    Linux命令行與shell腳本編寫
    發(fā)表于 01-11 16:50 ?4次下載

    100Shell腳本經(jīng)典案例解析

    今天浩道跟大家分享100Linux Shell腳本經(jīng)典案例,讓你一次擼夠。
    的頭像 發(fā)表于 02-10 13:51 ?2422次閱讀

    如何快速入門Shell腳本呢?

    Shell 語言作為類 Unix 系統(tǒng)的原生腳本,有著非常實用的價值。
    的頭像 發(fā)表于 05-22 11:51 ?552次閱讀

    Linux Shell腳本經(jīng)典案例分享

    ? 作為一名 Linux 運維工程師,會寫好的腳本不僅能提高工作效率,還能有更多的時間做自己的事。最近在網(wǎng)上沖浪的時候,發(fā)現(xiàn)大家對Shell腳本都有“心結(jié)”,要么覺得自己寫出來不好
    發(fā)表于 06-16 14:03 ?609次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>經(jīng)典案例分享

    分享249拿來即用的shell腳本

    ? 由于腳本案例太多,在此僅展示部分,完整版領(lǐng)取方式請見文末 ? ? ? 249拿來即用的shell腳本! ? 這249
    的頭像 發(fā)表于 07-07 10:52 ?1086次閱讀
    分享249<b class='flag-5'>個</b>拿來即用的<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>

    如何利用shell進行腳本程序的設(shè)計?

    利用Shell進行腳本程序的設(shè)計可以按照以下步驟進行: 選擇Shell解釋器:在UnixLinux系統(tǒng)中,通常會默認安裝一
    的頭像 發(fā)表于 11-08 10:17 ?494次閱讀

    Shell腳本檢查工具ShellCheck介紹

    ShellCheck是一用于bash/sh shell腳本的靜態(tài)分析工具,可以輔助檢查腳本語法錯誤,給出建議增強
    的頭像 發(fā)表于 12-27 13:43 ?1803次閱讀
    <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>檢查<b class='flag-5'>工具</b>ShellCheck介紹