shell腳本

shell腳本

簡介:

        使用腳本編程語言的好處是,它們多半運行在比編譯型語言還高的層級,能夠輕易處理文件與目錄之類的對象。缺點是:它們的效率通常不如編譯型語言。不過權衡之下,通常使用腳本編程還是值得的:花一個小時寫成的簡單腳本,同樣的功能用C或C++來編寫實現,可能需要兩天,而且一般來說,腳本執行的速度已經夠快了,快到足以讓人忽略它性能上的問題。因為Shell似乎是各UNIX系統之間通用的功能,并且經過了POSIX的標準化。因此,Shell腳本只要“用心寫”一次,即可應用到很多系統上。因此,之所以要使用Shell腳本是基于: 簡單性:Shell是一個高級語言;通過它,你可以簡潔地表達復雜的操作。 可移植性:使用POSIX所定義的功能,可以做到腳本無須修改就可在不同的系統上執行。 開發容易:可以在短時間內完成一個功能強大又妤用的腳本。

編程基礎:

    • 程序:指令+數據

    • 程序編程風格:

            過程式:以指令為中心,數據服務于指令

            對象式:以數據為中心,指令服務于數據

    • shell程序:提供了編程能力,解釋執行

程序的執行方式:

    • 計算機:運行二進制指令;

    • 編程語言:

                        低級:匯編

                        高級:

        編譯:高級語言–>編譯器–>目標代碼    如:java,C#

        解釋:高級語言–>解釋器–>機器代碼    如:shell, perl, python

編程基本概念

    • 編程邏輯處理方式:

            順序執行 (一步一步執行)

            循環執行 (循環重復一種命令直到條件滿足退出循環)

            選擇執行 (條件判斷懸著執行某些命令)

    • shell編程:過程式、解釋執行

    編程語言的基本結構:

            數據存儲:變量、數組

            表達式: a + b

            語句:if

shell腳本基礎

        shell腳本是包含一些命令或聲明,并符合一定格式的文 本文件

        格式要求:首行shebang機制 #!/bin/bash

創建shell腳本

    第一步:使用文本編輯器來創建文本文件

        第一行必須包括shell聲明序列:#!     如:#!/bin/bash

        添加注釋 注釋以#開頭

    第二步:運行腳本

        給予執行權限

                    blob.png        

腳本調試

    bash -n /path/to/some_script 檢測腳本中的語法錯誤

    bash -x /path/to/some_script 調試執行

    blob.png

變量

    • 變量:命名的內存空間

    • 作用:

        1、數據存儲格式

        2、參與的運算

        3、表示的數據范圍 類型: 字符 數值:整型、浮點型

    • 變量命名法則:

        1、不能使程序中的保留字:例如if, for;

        2、只能使用數字、字母及下劃線,且不能以數字開頭

        3、見名知義

        4、統一命名規則:駝峰命名法

1、本地變量

        變量賦值:name=‘value’,

        可以使用引用value:

        (1) 可以是直接字串; name=“root"

        (2) 變量引用:name="$USER"

        (3) 命令引用:name=`COMMAND`, name=$(COMMAND)

    變量引用:${name}, $name

        "":弱引用,其中的變量引用會被替換為變量值

         '':強引用,其中的變量引用不會被替換為變量值,而保 持原字符串

        顯示已定義的所有變量:set

        刪除變量:unset name

2、環境變量

    變量聲明、賦值:

        export name=VALUE

        declare -x name=VALUE

    變量引用:$name, ${name}

    顯示所有環境變量:

            export

            env

            printenv

  刪除:unset name

      bash有許多內建的環境變量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1

3、位置變量

    shell腳本之位置變量:

        $0       腳本的名稱

        $1,$2,$3….   第一個參數,第二個參數,第三個參數 

        shift      每shift一次,參數位置往前一個($2–>$1,$3—>2,…)

        shift N     往前的移動是N個    

    shell腳本之特殊變量:

        $?  上一次執行的狀態碼

        $#  參數個數

        $*  參數列表

        $@  參數列表

    腳本:

驗證位置變量和特殊變量:

#!/bin/bash

echo $0                                          命令本身

echo "the number of values is $#"     腳本參數個數

echo $*                                                    腳本參數列表

echo $@                                                  腳本參數列表

echo   $1                                                                第一個參數

echo   $3                                                                  第三個參數

腳本

blob.png

執行結果

blob.png

[root@localhost ~]# /testdir/bin/ceshi.sh 1 2 3 4 5

/testdir/bin/ceshi.sh                        $0,命令本身

5                                                       參數個數

1 2 3 4 5 參數列表并作為一個字符串,所以這個結果只有一個參數了

1 2 3 4 5 參數列表并每個參數獨立出來,所以這個結果還是有五個字符串

1 第一個參數

3 第三個參數

作業實例:

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

主機名:hostname

IPv4地址:ifconfig | grep 'inet\b'  | grep -v '127.0.0.1' | tr -s ' '  | cut -d' '  -f3

操作系統版本:cat /etc/redhat-release

內核版本:uname -r

CPU型號:lscpu | grep -i "型號名稱:"

內存大?。篺ree -h | sed -n '2p' | tr -s ' ' | cut -d' ' -f2

硬盤大?。篺disk -l|sed -n '2p'|cut -dG -f1|grep -o [[:digit:]].*\.

blob.png

blob.png

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

備份至目:/root/etc$(date +%F)

blob.png

blob.png

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

顯示當前硬盤分區中空間利用率最大的值:df | grep '/dev/sd' | tr -s ' ' | sort -nr -t' ' -k5 | head -1 | cut -d' ' -f5

blob.png

blob.png

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

顯示并排序netstat -nt | tr -s ' ' | cut -d' ' -f5 | tr -cs '0-9.' '\n' | egrep '([0-9]+.){3}[0-9]+' | sort | uniq -c | sort -nr | tr -s ' ' '\t'

blob.png

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

切出uid并做加法

blob.png

顯示出來

blob.png

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

取兩個文件內的空行數并做加法

blob.png

blob.png

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

統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件

blob.png

總數

blob.png

7、寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數

blob.png

blob.png

blob.png

8、寫一個

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

blob.png

blob.png

9、chmod -rw /tmp/file1,編寫腳本/root/bin/per.sh,判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫

blob.png

blob.png

10、編寫腳本/root/bin/nologin.sh和login.sh,實現禁止和充許普通用戶登錄系統。

blob.png

blob.png

blob.png

blob.png

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

blob.png

blob.png

12、計算1+2+3+…+100的值

blob.png

blob.png

blob.png

13、計算從腳本第一參數A開始,到第二個參數B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是則計算之

blob.png

blob.png

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

(0)
502795641502795641
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相關推薦

  • OSI和TCP/IP

            我們生活中各方面都離不開網絡,那網絡究竟是什么東西呢?它是怎么做到讓在不同地點的人無視空間距離完成通信的呢?首先我們來了解一下網絡的基本概念。網絡是由節點和連線構成,表示諸多對象及其相互聯系。在數學上,網絡是一種圖,一般認為專指加權圖。網絡除了數學定義外,還有具體…

    2017-09-02
  • N21天天第十一周課程練習

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 SSL協議基礎: SSL協議位于TCP/IP協議與各種應用層協議之間,本身又分為兩層: 1)SSL記錄協議:建立在可靠傳輸層協議(TCP)之上,為上層協議提供數據封裝、壓縮、加密等基本功能。 2)SSL握手協議:在SSL記錄協議之上,用于實際數據傳輸前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。 SS…

    Linux干貨 2016-10-09
  • 理解基本權限以及特殊權限:Suid 、Sgid、Sticky以及acl

    理解基本權限以及特殊權限:Suid 、Sgid、Sticky以及acl 在Linux中特殊權限是什么?為什么要設定特殊權限?回答這個問題前,我們不妨思考為什么要設定權限? 大家知道Linux中一切皆文件。不論你是什么,在linux系統中都會被當做一個文件來看待。無論你是文本或目錄,硬件或軟件,圖片或視頻等等,統統都被當做文件來看待。所以,在linux中,文件…

    Linux干貨 2017-04-08
  • rpm與yum的簡單命令

                                  …

    Linux干貨 2017-04-18
  • Linux命令學習

    閱讀目錄 Linux cat命令 file命令 dd命令 hexdump命令 cat命令   cat三大功能:      1.一次顯示整個文件:cat filename      2.從鍵盤創建一個文件:cat > filename 注意只能創建新文件,…

    Linux干貨 2017-07-16
  • 用戶與組

    一、用戶與組的概念 1、Linux多用戶,多任務的特性    Linux是多用戶多任務操作系統,多用戶多任務就是可在系統上建多個用戶,多個用戶可同一時間同一個系統互不影執行的響各自不同的任務。例如linux服務器上有root、www、ftp,四個用戶。同一時間內,root用戶在查看系統日志,管理維護系統,www用戶在修改自己的網頁程序,f…

    Linux干貨 2016-10-25

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-15 16:58

    文章整體思路清晰,排版精美,內容充實飽滿

欧美性久久久久