linux脚本转unix工具,10个增加UNIX/Linux Shell脚本趣味的工具

b575f49d79753aa0620e0924aac524f3.png

有些误解认为 shell 脚本仅用于 CLI 环境。实际上在 KDE 或 Gnome 桌面下,你可以有效的使用各种工具编写 GUI 或者网络(socket)脚本。shell 脚本可以使用一些 GUI 组件(菜单、警告框、进度条等),你可以控制终端输出、光标位置以及各种输出效果等等。利用下面的工具,你可以构建强壮的、可交互的、对用户友好的 UNIX/Linux bash 脚本。

制作 GUI 应用不是一项困难的任务,但需要时间和耐心。幸运的是,UNIX 和 Linux 都带有大量编写漂亮 GUI 脚本的工具。以下工具是基于 FreeBSD 和 Linux 操作系统做的测试,而且也适用于其他类 UNIX 操作系统。

1、notify-send 命令

notify-send 命令允许你借助通知守护进程发送桌面通知给用户。这种避免打扰用户的方式,对于通知桌面用户一个事件或显示一些信息是有用的。在 Debian 或 Ubuntu 上,你需要使用 apt 命令 或 apt-get 命令 安装的包:

sudoapt-getinstall libnotify-bin

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

sudoyuminstall libnotify

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

`$ sudo dnf install libnotify`

Inthisexample,send simple desktop notificationfromthe command line,enter:

### 发送一些通知 ###

notify-send"rsnapshot done :)"

示例输出:

2d458a9752451eb5a169b55da8ddf18f.png

notify-send: Shell Script Get Or Send Desktop Notifications

下面是另一个附加选项的代码:

...

alert=18000

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

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

...

示例输出:

e38021268d03a261005a2efcc4db4b5e.png

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

这里:

-t 5000:指定超时时间(毫秒) (5000 毫秒 = 5 秒)

-u low: 设置紧急等级 (如:低、普通、紧急)

-i gtk-dialog-info: 设置要显示的图标名称或者指定的图标(你可以设置路径为:-i /path/to/your-icon.png)

关于更多使用 notify-send 功能的信息,请参考 man 手册。在命令行下输入 man notify-send 即可看见:

mannotify-send

2、tput 命令

tput 命令用于设置终端特性。通过 tput 你可以设置:

在屏幕上移动光标。

获取终端信息。

设置颜色(背景和前景)。

设置加粗模式。

设置反转模式等等。

下面有一段示例代码:

#!/bin/bash

#clearthescreen

tputclear

#Movecursor toscreenlocation X,Y(topleftis0,0)

tput cup315

#Seta foreground colourusingANSI escape

tput setaf3

echo"XYX Corp LTD."

tput sgr0

tput cup517

#Setreverse video mode

tput rev

echo"M A I N - M E N U"

tput sgr0

tput cup715

echo"1. User Management"

tput cup815

echo"2. Service Management"

tput cup915

echo"3. Process Management"

tput cup1015

echo"4. Backup"

#Setbold mode

tput bold

tput cup1215

read-p"Enter your choice [1-4] "choice

tputclear

tput sgr0

tput rc

示例输出:

ec9059cadfef7bf39848b36a8f2dd9b0.png

Linux / UNIX Script Colours and Cursor Movement With tput

关于 tput 命令的详细信息,参见手册:

man5terminfo

mantput

3、setleds 命令

setleds 命令允许你设置键盘灯。下面是打开数字键灯的示例:

setleds-D+num

关闭数字键灯,输入:

setleds-D-num

-caps:关闭大小写锁定灯

+caps:打开大小写锁定灯

-scroll:关闭滚动锁定灯

+scroll:打开滚动锁定灯

查看 setleds 手册可看见更多信息和选项 man setleds。

4、zenity 命令

zenity 命令显示 GTK+ 对话框,并且返回用户输入。它允许你使用各种 Shell 脚本向用户展示或请求信息。下面是一个 whois 指定域名目录服务的 GUI 客户端示例。

#!/bin/bash

#Getdomain 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[$?-eq0]

then

#Displaya progress dialogwhilesearching 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}

#Displayback output

${_zenity}--width=800--height=600\

--title"Whois info for $domain"\

--text-info--filename="${_out}"

else

${_zenity}--error \

--text="No input provided"

fi

示例输出:

1cf40b5978d3da19a8e0941ce43265d7.png

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

参见手册获取更多 zenity 信息以及其他支持 GTK+ 的组件:

zenity--help

manzenity

5、kdialog 命令

kdialog 命令与 zenity 类似,但它是为 KDE 桌面和 QT 应用设计。你可以使用 kdialog 展示对话框。下面示例将在屏幕上显示信息:

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

示例输出:

89a31fed380aaec5bba028db4af599ce.png

Kdialog: Suppressing the display of a dialog

6、Dialog

Dialog 是一个使用 Shell 脚本的应用,显示用户界面组件的文本。它使用 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\"?"760

#Getexitstatus

#0means user hit[yes]button.

#1means user hit[no]button.

#255means user hit[Esc]key.

response=$?

case$responsein

0)echo"File deleted.";;

1)echo"File not deleted.";;

255)echo"[ESC] key pressed.";;

esac

参见 dialog 手册获取详细信息:man dialog。

关于其他用户界面工具的注意事项

UNIX、Linux 提供了大量其他工具来显示和控制命令行中的应用程序,shell 脚本可以使用一些 KDE、Gnome、X 组件集:

gmessage - 基于 GTK xmessage 的克隆

xmessage - 在窗口中显示或询问消息(基于 X 的 /bin/echo)

whiptail - 显示来自 shell 脚本的对话框

python-dialog - 用于制作简单文本或控制台模式用户界面的 Python 模块

7、logger 命令

logger 命令将信息写到系统日志文件,如:/var/log/messages。它为系统日志模块 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

示例输出:

Apr2000:11:45vivek-desktop kernel:[38600.515354]CPU0:Temperature/speed normal

Apr2000:12:20vivek-desktop mysqld:DatabaseServerfailed

参见 《如何写消息到 syslog 或 日志文件》 获得更多信息。此外,你也可以查看 logger 手册获取详细信息:man logger

8、setterm 命令

setterm 命令可设置不同的终端属性。下面的示例代码会强制屏幕在 15 分钟后变黑,监视器则 60 分钟后待机。

setterm-blank15-powersave powerdown-powerdown60

下面的例子将 xterm 窗口中的文本以下划线展示:

setterm-underline on;

echo"Add Your Important Message Here"

setterm-underline off

另一个有用的选项是打开或关闭光标显示:

setterm-cursor off

打开光标:

setterm-cursor on

参见 setterm 命令手册获取详细信息:man setterm

9、smbclient:给 MS-Windows 工作站发送消息

smbclient 命令可以与 SMB/CIFS 服务器通讯。它可以向 MS-Windows 系统上选定或全部用户发送消息。

smbclient-MWinXPPro<

Message1

Message2

...

..

EOF

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

参见 smbclient 手册或者阅读我们之前发布的文章:《给 Windows 工作站发送消息》:man smbclient

10、Bash 套接字编程

在 bash 下,你可以打开一个套接字并通过它发送数据。你不必使用 curl 或者 lynx 命令抓取远程服务器的数据。bash 和两个特殊的设备文件可用于打开网络套接字。以下选自 bash 手册:

/dev/tcp/host/port - 如果 host 是一个有效的主机名或者网络地址,而且端口是一个整数或者服务名,bash 会尝试打开一个相应的 TCP 连接套接字。

/dev/udp/host/port - 如果 host 是一个有效的主机名或者网络地址,而且端口是一个整数或者服务名,bash 会尝试打开一个相应的 UDP 连接套接字。

你可以使用这项技术来确定本地或远程服务器端口是打开或者关闭状态,而无需使用 nmap 或者其它的端口扫描器。

#findoutifTCP port25openornot

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

echo"Scanning TCP ports..."

forpin{1..1023}

do

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

done

示例输出:

ScanningTCP ports...

22open

53open

80open

139open

445open

631open

下面的示例中,你的 bash 脚本将像 HTTP 客户端一样工作:

#!/bin/bash

exec3<>/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

whileread LINE

do

#dosomething on $LINE

#orsend $LINE togreporawkforgrabbing data

#orsimply display back datawithechocommand

echo$LINE

done

参见 bash 手册获取更多信息:man bash

关于 GUI 工具和 cron 任务的注意事项

如果你 使用 crontab 来启动你的脚本,你需要使用 export DISPLAY=[用户机器]:0 命令请求本地显示或输出服务。举个例子,使用 zenity 工具调用 /home/vivek/scripts/monitor.stock.sh:

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

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值