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 09:01
下一篇 2016-08-12 09:01

相關推薦

  • M20-1正則表達式有話說

    1、找出ifconfig命令結果中本機的所有ipv4地址  [root@centos7 ~]# ifconfig |grep -E -o '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-…

    Linux干貨 2016-08-05
  • Centos6.5基于SSL密碼認證部署ELK(Elasticsearch+Logstash+kibana)

    1       簡介 本章我們來介紹Centos6.5基于SSL密碼認證部署ELK(Elasticsearch 1.4.4+Logstash 1.4.2+kibana3),同時為大家介紹如何集合如上組件來收集日志,本章的日志收集主要為大家介紹SYSTEM日志收集. 集中化日志收集主要應用場景是在同一…

    Linux干貨 2015-06-18
  • 0804正則表達式作業

    用正則表達式表示IP地址         首先來分析一下,制IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節)。IP地址通常用“點分十進制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進制整數。例:點分十進IP地址(1…

    Linux干貨 2016-08-10
  • LVS專題: NAT和DR模型實現Web負載均衡

    LVS專題: NAT和DR模型實現Web負載均衡 前言: NAT實現 Real Server配置 Director配置 測試 實驗拓撲 實驗環境 實驗步驟 DR實現 Director配置 Real Server配置 測試 實驗拓撲 實驗環境 實驗步驟 總結: 前言: 在上篇文章中我們講了一些LVS的基本概念和相應模型的實驗原理和流程,本篇文章我們主要使用lv…

    2016-04-05
  • 第三次作業

    第三次作業 一、軟鏈接與硬鏈接的區別    硬鏈接就是同一個文件使用了多個別名(他們有共同的 inode)。 硬鏈接可由命令 link 或 ln 創建,如: 1 2 #link oldfile newfile  #ln oldfile newfile   由于硬鏈接是有著相同 i…

    Linux干貨 2016-08-03

評論列表(1條)

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

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

欧美性久久久久