linux下实用小脚本,十个增加 Linux Shell 脚本趣味的小工具
发布日期:2021-06-24 17:13:05 浏览次数:2 分类:技术文章

本文共 4875 字,大约阅读时间需要 16 分钟。

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

1. notify-send 命令

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

$ sudo apt-get install libnotify-bin

下面这个例子展示了如何从命令行向桌面发送一个简单的消息:

notify-send "rsnapshot done :)"

输出:

3b83db863340bad3a50b1879268f0025.png

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

....

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; }

...

输出:

05e616632cae7b6c332c8bf8966df08b.png

这里的参数解释如下:

-t 5000:指定超时的时间,毫秒

-u low:设置是否紧急

-i gtk-dialog-info:通知图标,你可以指定图标 -i /path/to/your-icon.png

2. 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

输出:

3bbbaff4ea3ae5d3460042cad4234f4b.png

3. setleds 命令

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

setleds -D +num

关闭数字键盘灯:

setleds -D -num

-caps: 清除大写灯

+caps:打开大写灯

-scroll:清除滚动锁

+scroll:打开滚动锁

4. zenity 命令

这个命令可以显示GTK+的对话框,然后返回用户的输入。你可以用这个命令在脚本中显示信息,并要求用户输入信息。下面这段代码就是域名的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

输出:

b8a585ec1f8eebb391e5a68699b7548b.png

5. kdialog 命令

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

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

输出

dbab2bfec01871cb9137ab8877e5391f.png

6. 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\"?" 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

7. logger 命令

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

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

8. setterm 命令

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

setterm -blank 15 -powersave powerdown -powerdown 60

下面这段命令可以在中断显示加下划线的文字:

setterm -underline on;

echo "Add Your Important Message Here"

setterm -underline off

或者你可以关闭光标:

setterm -cursor off

9. smbclient:向 MS-Windows 系统发送消息

smbclient可以和 SMB/CIFS服务器通信。它可以向MS-Windows系统的指定用户发送消息:

smbclient -M WinXPPro <

或者

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扫描器:

# 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"

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

下面的这个例子让你的脚本扮演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

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

关于GUITools和Cronjob

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

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

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

转载地址:https://blog.csdn.net/weixin_34017915/article/details/116637030 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:xshell中linux运行py文件,python3模拟实现xshell远程执行liunx命令的方法
下一篇:linux redhat 版本查看,查看RedHat linux版本的三种方法

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月07日 16时49分45秒