博客專欄

EEPW首頁 > 博客 > 扣丁學(xué)堂Linux培訓(xùn)之增加UNIX/Linux Shell腳本趣味的工具分享

扣丁學(xué)堂Linux培訓(xùn)之增加UNIX/Linux Shell腳本趣味的工具分享

發(fā)布人:扣丁客 時(shí)間:2020-12-11 來源:工程師 發(fā)布文章

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

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

1、notify-send命

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

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


示例輸出:


下面是另一個(gè)附加選項(xiàng)的代碼:

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:指定超時(shí)時(shí)間(毫秒)(5000毫秒=5秒)

-ulow:設(shè)置緊急等級(jí)(如:低、普通、緊急)

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

mannotify-send


2、tput命令

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

在屏幕上移動(dòng)光標(biāo)。

獲取終端信息。

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

設(shè)置加粗模式。

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

下面有一段示例代碼:

  #!/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命令允許你設(shè)置鍵盤燈。下面是打開數(shù)字鍵燈的示例:
  setleds-D+num
  關(guān)閉數(shù)字鍵燈,輸入:
  setleds-D-num
  -caps:關(guān)閉大小寫鎖定燈
  +caps:打開大小寫鎖定燈
  -scroll:關(guān)閉滾動(dòng)鎖定燈
  +scroll:打開滾動(dòng)鎖定燈


4、zenity命令

zenity命令顯示GTK+對(duì)話框,并且返回用戶輸入。它允許你使用各種Shell腳本向用戶展示或請(qǐng)求信息。下面是一個(gè)whois指定域名目錄服務(wù)的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應(yīng)用設(shè)計(jì)。你可以使用kdialog展示對(duì)話框。下面示例將在屏幕上顯示信息:

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


示例輸出:




6、Dialog

Dialog是一個(gè)使用Shell腳本的應(yīng)用,顯示用戶界面組件的文本。它使用curses或者ncurses庫。下面是一個(gè)示例代碼:

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


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

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

gmessage-基于GTKxmessage的克隆

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

whiptail-顯示來自shell腳本的對(duì)話框

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

7、logger命令

logger命令將信息寫到系統(tǒng)日志文件,如:/var/log/messages。它為系統(tǒng)日志模塊syslog提供了一個(gè)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命令可設(shè)置不同的終端屬性。下面的示例代碼會(huì)強(qiáng)制屏幕在15分鐘后變黑,監(jiān)視器則60分鐘后待機(jī)。

setterm-blank15-powersavepowerdown-powerdown60
下面的例子將xterm窗口中的文本以下劃線展示:
setterm-underlineon;
echo"AddYourImportantMessageHere"
setterm-underlineoff
另一個(gè)有用的選項(xiàng)是打開或關(guān)閉光標(biāo)顯示:
setterm-cursoroff
打開光標(biāo):
setterm-cursoron


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

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

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



10、Bash套接字編程

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

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

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

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

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


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

  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來啟動(dòng)你的腳本,你需要使用exportDISPLAY=[用戶機(jī)器]:0命令請(qǐng)求本地顯示或輸出服務(wù)。想要了解更多關(guān)于Linux發(fā)展前景趨勢(shì),請(qǐng)關(guān)注扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Linux視頻教程系統(tǒng),通過千鋒扣丁學(xué)堂金牌講師在線錄制的Linux視頻教程課程,讓你快速掌握Linux從入門到精通開發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Linux技術(shù)交流群:692395686。微 信 號(hào):codingbb

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉