博客專欄

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

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

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

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

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

        1、notify-send命

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

        sudoapt-getinstalllibnotify-bin
        CentOS/RHEL用戶使用下面的yum命令:
        sudoyuminstalllibnotify
        FedoraLinux用戶使用下面的dnf命令:
        `$sudodnfinstalllibnotify`
        Inthisexample,sendsimpledesktopnotificationfromthecommandline,enter:
        ###發(fā)送一些通知###
        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:設(shè)置緊急等級(如:低、普通、緊急)

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

        mannotify-send


        2、tput命令

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

        在屏幕上移動光標(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)閉滾動鎖定燈
          +scroll:打開滾動鎖定燈


        4、zenity命令

        zenity命令顯示GTK+對話框,并且返回用戶輸入。它允許你使用各種Shell腳本向用戶展示或請求信息。下面是一個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è)計。你可以使用kdialog展示對話框。下面示例將在屏幕上顯示信息:

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


        示例輸出:




        6、Dialog

        Dialog是一個使用Shell腳本的應(yīng)用,顯示用戶界面組件的文本。它使用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


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

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

        gmessage-基于GTKxmessage的克隆

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

        whiptail-顯示來自shell腳本的對話框

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

        7、logger命令

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

        setterm-blank15-powersavepowerdown-powerdown60
        下面的例子將xterm窗口中的文本以下劃線展示:
        setterm-underlineon;
        echo"AddYourImportantMessageHere"
        setterm-underlineoff
        另一個有用的選項是打開或關(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下,你可以打開一個套接字并通過它發(fā)送數(shù)據(jù)。你不必使用curl或者lynx命令抓取遠(yuǎn)程服務(wù)器的數(shù)據(jù)。bash和兩個特殊的設(shè)備文件可用于打開網(wǎng)絡(luò)套接字。以下選自bash手冊:

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

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

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

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



        關(guān)鍵詞:

        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 上饶市| 进贤县| 股票| 句容市| 会东县| 林甸县| 榆林市| 慈利县| 股票| 长海县| 阿坝县| 维西| 黔东| 林芝县| 高尔夫| 河北区| 图片| 玉门市| 墨竹工卡县| 商城县| 凤阳县| 五河县| 舞钢市| 读书| 临桂县| 密山市| 铜川市| 揭西县| 盘山县| 奇台县| 阜南县| 遂溪县| 侯马市| 九江市| 贵州省| 贡觉县| 宜良县| 定结县| 玛沁县| 聂荣县| 页游|