`
sealbird
  • 浏览: 583437 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

10个工具让你的 shell 脚本更强大

阅读更多
from http://www.oschina.net/question/28_39527
虫虫 发表于 2-27 22:45 昨天(22:45), 12回/1959阅, 最后回答: 16分钟前 ( 69人收藏此话题, 我要收藏 |举报) 讨论区 » 技术分享 顶
0

踩  很多人误以为shell脚本只能在命令行下使用。其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等。你可以控制最终的输出,光标位置还有各种输出效果。下面我将介绍一些工具,帮助你创建强大的,互动的,用户友好的 Unix/Linux shell脚本。我在FreeBSD和Linux下测试过这些工具,不过其他UNIX系列的操作系统应该都支持的。

1. notify-send 命令
这个命令可以让你通过通知进程发送一个桌面通知给用户。这可以用来向用户发送提示,或者显示一些信息而不用打断用户工作。你需要安装如下软件包:

view sourceprint?
1 $ sudo apt-get install libnotify-bin
下面这个例子展示了如何从命令行向桌面发送一个简单的消息:

view sourceprint?
1 notify-send "rsnapshot done"
输出:


下面是一个复杂一点的例子:

view sourceprint?
1 .... 

2 alert=18000 

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

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

5 ...
输出:


这里的参数解释如下:

• -t 5000:指定超时的时间,毫秒
• -u low:设置是否紧急
• -i gtk-dialog-info:通知图标,你可以指定图标 -i /path/to/your-icon.png

2. tput 命令
这个命令是用来设置终端特性的:

•  移动光标
•  获得终端信息
•  设置前景和背景色
•  设置粗体模式
•  设置反模式等等
举例:

view sourceprint?
01 #!/bin/bash 

02    

03 # clear the screen 

04 tput clear

05    

06 # Move cursor to screen location X,Y (top left is 0,0) 

07 tput cup 3 15 

08    

09 # Set a foreground colour using ANSI escape 

10 tput setaf 3 

11 echo "XYX Corp LTD."

12 tput sgr0 

13    

14 tput cup 5 17 

15 # Set reverse video mode 

16 tput rev 

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

18 tput sgr0 

19    

20 tput cup 7 15 

21 echo "1. User Management"

22    

23 tput cup 8 15 

24 echo "2. Service Management"

25    

26 tput cup 9 15 

27 echo "3. Process Management"

28    

29 tput cup 10 15 

30 echo "4. Backup"

31    

32 # Set bold mode 

33 tput bold 

34 tput cup 12 15 

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

36    

37 tput clear

38 tput sgr0 

39 tput rc
输出:


3. setleds 命令
这个命令可以让你控制键盘灯,例如打开数字键盘灯:

view sourceprint?
1 setleds -D +num
关闭数字键盘灯:

view sourceprint?
1 setleds -D -num
•  -caps: 清除大写灯
•  +caps:打开大写灯
•  -scroll:清除滚动锁
•  +scroll:打开滚动锁

4. zenity 命令
这个命令可以显示GTK+的对话框,然后返回用户的输入。你可以用这个命令在脚本中显示信息,并要求用户输入信息。下面这段代码就是域名的whois查询:

view sourceprint?
01 #!/bin/bash 

02 # Get domain name 

03 _zenity="/usr/bin/zenity"

04 _out="/tmp/whois.output.$$"

05 domain=$(${_zenity} --title  "Enter domain" \ 

06                 --entry --text "Enter the domain you would like to see whois info" ) 

07    

08 if [ $? -eq 0 ] 

09 then

10   # Display a progress dialog while searching whois database 

11   whois $domain  | tee >(${_zenity} --width=200 --height=100 \ 

12                       --title="whois" --progress \ 

13                         --pulsate --text="Searching domain info..." \ 

14                                     --auto-kill --auto-close \ 

15                                     --percentage=10) >${_out} 

16    

17   # Display back output 

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

19          --title "Whois info for $domain" \ 

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

21 else

22   ${_zenity} --error \ 

23          --text="No input provided"

24 fi
输出:



5. kdialog 命令
这个命令和zenity很想,只不过它是为KDE/QT应用准备的。使用方法如下:

view sourceprint?
1 kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."
输出


你可以查看 shell scription with KDE Dialogs 来获取更多信息

6. Dialog
这个命令可以在shell脚本中显示文本组件。它使用了curses和ncurses类库。示例代码:

view sourceprint?
01 >#!/bin/bash 

02 dialog --title "Delete file" \ 

03 --backtitle "Linux Shell Script Tutorial Example" \ 

04 --yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60 

05    

06 # Get exit status 

07 # 0 means user hit [yes] button. 

08 # 1 means user hit [no] button. 

09 # 255 means user hit [Esc] key. 

10 response=$? 

11 case $response in

12    0) echo "File deleted.";; 

13    1) echo "File not deleted.";; 

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

15 esac
7. logger 命令
这个命令可以让你写入系统日志例如 /var/log/messages:

view sourceprint?
1 logger "MySQL database backup failed."

2 tail -f /var/log/messages 

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

4 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

8. setterm 命令
这个命令可以设置中断的属性。下面的例子是强制屏幕全黑15分钟,并且60分钟后把显示器设为待机状态:

view sourceprint?
1 setterm -blank 15 -powersave powerdown -powerdown 60
下面这段命令可以在中断显示加下划线的文字:

view sourceprint?
1 setterm -underline on; 

2 echo "Add Your Important Message Here"

3 setterm -underline off
或者你可以关闭光标:

view sourceprint?
1 setterm -cursor off
9. smbclient:向 MS-Windows 系统发送消息
smbclient可以和 SMB/CIFS服务器通信。它可以向MS-Windows系统的指定用户发送消息:

view sourceprint?
1 smbclient -M WinXPPro <<EOF 

2 Message 1 

3 Message 2 

4 ... 

5 .. 

6 EOF
或者

view sourceprint?
1 echo "${Message}" | smbclient -M salesguy2
10. Bash Socket 编程
你可以在bash中开启一个socket链接,并且传输数据。Bash有两个特殊的设备文件:

•  /dev/tcp/host/port - 如果hostname,和port是合法的话,bash会尝试开启一个TCP连接。
•  /dev/udp/host/port - 如果hostname和port是合法的话,bash会开启一个UDP连接。
 
你可以利用这个技术来测试一台主机的端口是否是开启的,而不需要使用nmap或者port扫描器:

view sourceprint?
1 # find out if TCP port 25 open or not 

2 (echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"
你可以 使用循环来查找开着的端口:

view sourceprint?
1 echo "Scanning TCP ports..."

2 for p in {1..1023} 

3 do

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

5 done
输出:
Scanning TCP ports...
22 open
53 open
80 open
139 open
445 open
631 open

下面的这个例子让你的脚本扮演HTTP客户端:

view sourceprint?
01 #!/bin/bash 

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

03    

04 printf "GET / HTTP/1.0\r\n" >&3 

05 printf "Accept: text/html, text/plain\r\n" >&3 

06 printf "Accept-Language: en\r\n" >&3 

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

08 printf "\r\n" >&3 

09    

10 while read LINE <&3 

11 do

12    # do something on $LINE 

13    # or send $LINE to grep or awk for grabbing data 

14    # or simply display back data with echo command 

15    echo $LINE 

16 done
关于GUITools和Cronjob
如果你使用cronjob来调用你的脚本的话,你要通过“ export DISPLAY=[user's machine]:0 ”命令来设置本地的 display/input 服务。例如调用 /home/vivek/scripts/monitor.stock.sh脚本,它使用了 zenity 工具:

view sourceprint?1 @hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh

所有的命令你都可以通过“man”来查询详细的使用方式。

分享到:
评论

相关推荐

    250个shell脚本

    Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档收集了250个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、安全防护、数据库备份等核心...

    Shell脚本学习教程PDF版

    Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...

    shell脚本大全

    在IT领域,Shell脚本是Linux和Unix操作系统中不可或缺的一部分,它是一种强大的自动化工具,能够帮助用户执行一系列命令,简化日常任务。"shell脚本大全"这个资源可能包含了大量的示例脚本,涵盖了各种用途和场景,...

    109个shell脚本合计

    Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档汇总了109个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、网络监控、数据库备份等。...

    23 个非常实用的 Shell 脚本实例.doc

    以下是 23 个非常实用的 Shell 脚本实例,展示了 Shell 脚本编程的实用技术和常见工具用法。 一、检测两台服务器指定目录下的文件一致性 这个脚本使用 MD5 值来检测两台服务器上文件的一致性。首先,将指定目录下...

    我的几个常用shell脚本

    在IT领域,Shell脚本是一种极其实用的工具,特别是在Linux和Unix系统中。Shell脚本是用Shell语言编写的程序,...学习和理解这些脚本,不仅能提升你的Linux技能,还能让你更好地理解和应用命令行环境中的自动化工具。

    C语言中文网shell脚本教程

    `2.27Linux bc命令:一款数学计算器.html`将介绍bc命令,这是一个强大的交互式计算工具,支持浮点运算和高级数学功能,对于在Shell脚本中进行复杂的数学计算非常有用。 通过这些教程,学习者可以全面了解Shell脚本...

    Shell脚本实现二维码图片生成

    Shell脚本是Linux系统中的一种强大工具,它允许用户通过编写命令行指令序列来执行自动化任务。在这个场景中,我们讨论的是一个特定的Shell脚本,它的目标是生成二维码图片。在旧有的系统中,如果没有源码可供修改,...

    shell脚本-大数据

    综上所述,shell脚本在大数据领域具有广泛的用途,从数据预处理到系统管理,从任务调度到日志分析,其强大的命令组合能力和灵活性使其成为大数据工程师不可或缺的工具。通过熟练掌握shell脚本,可以提升大数据工作...

    非常简单的Shell菜单脚本

    在Linux系统中,Shell脚本是一种强大的自动化工具,可以实现一系列命令的集合,方便用户进行交互式操作。本文介绍的“非常简单的Shell菜单脚本”就是一种基础的Shell脚本应用,它创建了一个简单的菜单系统,使用户...

    Shell 脚本专家指南

    Shell脚本是Linux/Unix操作系统中非常强大的工具,它允许用户编写一系列命令并自动执行它们,这些命令通常以bash(Bourne Again SHell)或其他类型的shell(如sh、csh、ksh等)编写而成。Shell脚本广泛用于系统管理...

    常用shell脚本示例

    在IT领域,Shell脚本是Linux或Unix操作系统中不可或缺的一部分,它是一种强大的自动化工具,能够帮助用户执行一系列命令,简化日常任务。这个名为"常用shell脚本示例"的资源显然是为初学者设计的,目的是教授如何...

    linux下shell脚本实现数据的导出

    在Linux环境下,shell脚本是自动化任务的强大工具,尤其对于数据导出这样的操作,通过编写shell脚本可以方便地实现定期备份或者按需导出。本文将深入讲解如何使用shell脚本来实现数据的导出,并结合Java代码进行调用...

    unix shell脚本编程

    Unix Shell脚本编程是Unix操作系统中一种强大的自动化工具,它允许用户编写一系列命令,形成一个可执行的文本文件,称为Shell脚本。这种脚本语言的功能强大且灵活,类似于高级编程语言,但更加轻量级,特别适合进行...

    Shell脚本专家指南

    在“Shell脚本专家指南”中,你将深入学习到如何充分利用这个工具来提高工作效率。 一、Shell脚本基础 1. Shell介绍:了解Shell的历史、类型和用途,比如sh、bash、ksh、csh等不同Shell的区别。 2. 变量与赋值:...

    Linux 命令与Shell 脚本编程pdf书籍

    Shell脚本是Linux系统中的一种自动化工具,可以编写一系列命令并将其打包成一个可执行文件,极大地提高了工作效率。书中详细讲解了Bash Shell的基础知识,包括变量、条件语句(如`if-else`)、循环结构(如`for`和`...

    shell脚本学习指南

    Shell脚本是Linux和Unix系统中的强大工具,它允许用户通过编写脚本来自动化一系列命令操作,极大地提高了系统管理和任务执行的效率。本文将深入探讨shell脚本的基础知识,包括语法、变量、控制结构、函数以及在实际...

    shell脚本培训视频.rar

    通过观看这个压缩包中的视频教程,你可以系统地学习Shell脚本的各个方面,从基本概念到高级技巧,逐步成为一名熟练的Shell脚本编写者。无论是为了日常系统管理,还是为了自动化工作流程,掌握Shell脚本都将极大地...

Global site tag (gtag.js) - Google Analytics