shell編程的常見實例

1. 寫一個腳本/root/bin/argsnum.sh 用戶輸入一個文件路徑并查找文件中空白行的個數

,如果用戶沒有輸入路徑則自動退出

 實驗結果如下:

blob.png

如果不輸入任何路徑程序會自動退出:實驗結果如下:

blob.png

用其他方法驗證是不是有兩行空行:

blob.png

blob.png

(個人總結):

1.   read 命令,如果用 -p 來做提示信息,則不支持\n換行,這時需要用echo命令,echo它  有自動換行,同時也支持\n   -t  timeout定義多長時間超時默認計時單位是分鐘。-n 定義輸入的的字符數,超出輸入后會,read會自動退出, -s 隱藏輸入時的字符,其實輸入有的只是設置成了和背景色一樣的的前景色。

2.   [[ -z “STRING”]] 字符串是否為空,空則為真.  [[ -n “STRING” ]]字符串是否為空,不空則為真——-注意方括號里面的兩邊是有空格的

3.   grep -c 做統計   grep -c “^$” $fpath  grep “^$” $fpath |wc  -l

2、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,  IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。

blob.png


blob.png

3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值

blob.png

blob.png

其他實現方式df | tr -s ' ' | cut -d' ' -f5 |sed 1d |sort -nr |head -1   但是通用性比較差

blob.png

(個人總結):

靈活應用tr 命令中的tr -s ‘ ’刪除重復的空格。

應用sed  #d去刪除某一行

4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序

   netstat -nt |cut -d: -f1|tr -s ' '|grep "[0-9]" |cut -d' ' -f4

blob.png

5、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd

    #!/bin/bash

   time=$(date '+%F')

   cp -r /etc/ /root/etc$time

blob.png

 6、 寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的           之和

blob.png

7、  寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和

blob.png

 8/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件

   法一:

   blob.png

法二:

 blob.png

(個人總結):

    比較靈活的應用位置變量來接受用戶動態傳過來的三個值,且使用了echo -en 進行取消自動換行和按需手動換行

 

9、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問

blob.png

  (個人總結)

    此練習中用到了-c  -W兩個選項,-c 是定義ping的次數,-W是定義ping的時間,而   &> /dec/null 是重定向到一個空設備中而不用顯示出來

      10、指定文件做為參數,判斷文件是否為.sh后綴,如果是,添加x權限

    #!/bin/bash

   echo $1 | grep .*\.sh$ |chmod +x $1 && echo 權限x已經附加 || echo 你輸入的目錄不是.sh

blob.png

11、 判斷硬盤的每個分區空間和inode的利用率是否大于80,如果是,發郵件通知root磁  盤滿

    [ `df -i |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1|sort -nr|head -1` -ge 80 ] || [ `df |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1 |sort -nr|head -1` -gt 80 ] && echo 磁盤將爆滿請檢查磁盤Inode或容量

blob.png

 [ `df -i |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1|sort -nr|head -1` -ge 8 ] || [ `df |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1 |sort -nr|head -1` -gt 80 ] && echo 磁盤將爆滿請檢查磁盤Inode或容量

   測試二、把磁盤條件中80改成8提示報警

blob.png

12、判斷輸入的IP是否為合法IP

     #!/bin/bash

    echo 請輸入IP地址

    read ips

    echo "$ips" |egrep    '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[    0-5])$' && echo 你輸入的地址是合法地址||echo 你輸入的IP地址有錯

blob.png

blob.png

13、計算1+2+3+…+100

blob.png

14、輸入起始值A和最后值B,計算從A+A+1…+(B-1)+B的總和

     #!/bin/bash

    echo 請輸入要A B

    read -p "你輸入的A值為" A

    read -p "你輸入的B值為" B

    [ $A -ge $B ]&&exit || echo `seq $A $B` |tr ' ' + |bc

blob.png

blob.png

(個人總結):用在echo中調用seq命令能夠靈活的橫行打印

原創文章,作者:yywan1314,如若轉載,請注明出處:http://www.www58058.com/33685

(0)
yywan1314yywan1314
上一篇 2016-08-12
下一篇 2016-08-12

相關推薦

  • 馬哥教育網絡班21期+第4周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 # cp -a /etc/skel /home/tuser1 # chmod -R g-rwx,o-rwx /home/tuser1/ 2、編輯…

    Linux干貨 2016-07-16
  • 20160804作業

    查出分區空間使用率的最大百分比值 查出用戶UID最大值的用戶名、UID及shell類型 查出/tmp的權限,以數字方式顯示 統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序 利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255        &nb…

    Linux干貨 2016-08-08
  • bash工作特性之命令執行狀態返回值和命令行展開的講解和實例

    命令執行狀態返回值 在Linux bash中可以用命令執行狀態返回值來判斷命令是否運行成功,而不需去關心命令返回的結果是多少。 bash通過狀態返回值來得到輸出結果; 成功:返回值 0 [root@localhost tmp]# ls aaa [root@localhost tmp]# mkdir $(date +%H-%m-%S) [root@localh…

    Linux干貨 2018-03-01
  • 第四周作業

    1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1以及內部文件的屬組和其它用戶均沒有任何訪問權限 cp -r /etc/skel  /home/tuser1 chmod go-rwx /home/tuser1 2. 編輯/etc/group文件,添加組hadoo…

    Linux干貨 2016-12-27
  • dns主從

    一、前言 Dns全稱domain name system,當我們訪問一個網站時,在網站輸入一個網址。但是網絡是靠ip地址這個邏輯地址來標識地址的。而一個網址是如何轉換為ip地址的?下面我們將簡單講解下dns的原理。 二、dns查詢過程 在了解dns查詢過程時,我們先了解一些有關dns的專業名詞     根域:用來管理互…

    Linux干貨 2015-10-01
  • Linux三劍客之sed命令

    一.sed命令概述 Stream EDitor ,行編輯器 sed是一種流編輯器,它一次處理一行內容.處理時,把當前處理的行存儲在臨時緩沖區中,稱為”模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕.接著處理下一行,這樣不斷重復,直到文件末尾.文件內容并沒有改變除非你使用重定向存儲輸出.sed主…

    Linux干貨 2016-08-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-12 14:05

    通過練習,總結對shell腳本的認識,是個很好的方式,shell腳本的變量也需要作者能有一個完整的概述哦

欧美性久久久久