这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 十个增加UNIX/LinuxShell脚本趣味的工具

共3条 1/1 1 跳转至

十个增加UNIX/LinuxShell脚本趣味的工具

菜鸟
2020-12-11 17:28:04     打赏

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

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

1、notify-send命

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

sudoapt-getinstalllibnotify-bin
CentOS/RHEL用户使用下面的yum命令:
sudoyuminstalllibnotify
FedoraLinux用户使用下面的dnf命令:
`$sudodnfinstalllibnotify`
Inthisexample,sendsimpledesktopnotificationfromthecommandline,enter:
###发送一些通知###
notify-send"rsnapshotdone:)"


示例输出:


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

alert=18000
live=$(lynx--dumphttp://money.rediff.com/|grep'BSELIVE'|awk'{print$5}'|sed's/,//g;s/\.[0-9]*//g')
[$notify_counter-eq0]&&[$live-ge$alert]&&{notify-send-t5000-ulow-i"BSESensextouched18k";notify_counter=1;}


示例输出:


这里:

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

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

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

mannotify-send


2、tput命令

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

在屏幕上移动光标。

获取终端信息。

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

设置加粗模式。

设置反转模式等等。

下面有一段示例代码:

  #!/bin/bash
  #clearthescreen
  tputclear
  #MovecursortoscreenlocationX,Y(topleftis0,0)
  tputcup315
  #SetaforegroundcolourusingANSIescape
  tputsetaf3
  echo"XYXCorpLTD."
  tputsgr0
  tputcup517
  #Setreversevideomode
  tputrev
  echo"MAIN-MENU"
  tputsgr0
  tputcup715
  echo"1.UserManagement"
  tputcup815
  echo"2.ServiceManagement"
  tputcup915
  echo"3.ProcessManagement"
  tputcup1015
  echo"4.Backup"
  #Setboldmode
  tputbold
  tputcup1215
  read-p"Enteryourchoice[1-4]"choice
  tputclear
  tputsgr0
  tputrc


示例输出:



3、setleds命令

  setleds命令允许你设置键盘灯。下面是打开数字键灯的示例:
  setleds-D+num
  关闭数字键灯,输入:
  setleds-D-num
  -caps:关闭大小写锁定灯
  +caps:打开大小写锁定灯
  -scroll:关闭滚动锁定灯
  +scroll:打开滚动锁定灯


4、zenity命令

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

  #!/bin/bash
  #Getdomainname
  _zenity="/usr/bin/zenity"
  _out="/tmp/whois.output.$$"
  domain=$(${_zenity}--title"Enterdomain"\
  --entry--text"Enterthedomainyouwouldliketoseewhoisinfo")
  if[$?-eq0]
  then
  #Displayaprogressdialogwhilesearchingwhoisdatabase
  whois$domain|tee>(${_zenity}--width=200--height=100\
  --title="whois"--progress\
  --pulsate--text="Searchingdomaininfo..."\
  --auto-kill--auto-close\
  --percentage=10)>${_out}
  #Displaybackoutput
  ${_zenity}--width=800--height=600\
  --title"Whoisinfofor$domain"\
  --text-info--filename="${_out}"
  else
  ${_zenity}--error\
  --text="Noinputprovided"
  fi


示例输出:




5、kdialog命令

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

kdialog--dontagainmy:nofilemsg--msgbox"File:'~/.backup/config'notfound."


示例输出:




6、Dialog

Dialog是一个使用Shell脚本的应用,显示用户界面组件的文本。它使用curses或者ncurses库。下面是一个示例代码:

  #!/bin/bash
  dialog--title"Deletefile"\
  --backtitle"LinuxShellTutorialExample"\
  --yesno"Areyousureyouwanttopermanentlydelete\"/tmp/foo.txt\"?"760
  #Getexitstatus
  #0meansuserhit[yes]button.
  #1meansuserhit[no]button.
  #255meansuserhit[Esc]key.
  response=$?
  case$responsein
  0)echo"Filedeleted.";;
  1)echo"Filenotdeleted.";;
  255)echo"[ESC]keypressed.";;
  esac


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

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

gmessage-基于GTKxmessage的克隆

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

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

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

7、logger命令

logger命令将信息写到系统日志文件,如:/var/log/messages。它为系统日志模块syslog提供了一个shell命令行接口:

  logger"MySQLdatabasebackupfailed."
  tail-f/var/log/messages
  logger-tmysqld-pdaemon.error"DatabaseServerfailed"
  tail-f/var/log/syslog
  示例输出:
  Apr2000:11:45vivek-desktopkernel:[38600.515354]CPU0:Temperature/speednormal
  Apr2000:12:20vivek-desktopmysqld:DatabaseServerfailed


8、setterm命令

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

setterm-blank15-powersavepowerdown-powerdown60
下面的例子将xterm窗口中的文本以下划线展示:
setterm-underlineon;
echo"AddYourImportantMessageHere"
setterm-underlineoff
另一个有用的选项是打开或关闭光标显示:
setterm-cursoroff
打开光标:
setterm-cursoron


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

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

  smbclient-MWinXPPro<
  Message1
  Message2
  ...
  ..
  EOF
  或
  echo"${Message}"|smbclient-Msalesguy2



10、Bash套接字编程

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

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

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

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

#findoutifTCPport25openornot
(echo>/dev/tcp/localhost/25)&>/dev/null&&echo"TCPport25open"||echo"TCPport25close"


下面的代码片段,你可以利用bash循环找出已打开的端口:

  echo"ScanningTCPports..."
  forpin{1..1023}
  do
  (echo>/dev/tcp/localhost/$p)>/dev/null2>&1&&echo"$popen"
  done
  示例输出:
  ScanningTCPports...
  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_Bashv.%s\r\n""${BASH_VERSION}">&3
  printf"\r\n">&3
  whilereadLINE<&3
  do
  #dosomethingon$LINE
  #orsend$LINEtogreporawkforgrabbingdata
  #orsimplydisplaybackdatawithechocommand
  echo$LINE
  done


最后体系如果你使用crontab来启动你的脚本,你需要使用exportDISPLAY=[用户机器]:0命令请求本地显示或输出服务。想要了解更多关于Linux发展前景趋势,请关注扣丁学堂Linux培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Linux视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的Linux视频教程课程,让你快速掌握Linux从入门到精通开发实战技能。扣丁学堂Linux技术交流群:692395686。微 信 号:codingbb



高工
2020-12-15 21:36:37     打赏
2楼

学习一下


工程师
2020-12-15 21:53:43     打赏
3楼

十分不错的工具


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]