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

硬盤大小:fdisk -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
下一篇 2016-08-15

相關推薦

  • 8月20日軟件包管理

    軟件包管理 本章內容 軟件運行環境 軟件包基礎 Rpm包管理 yum管理 定制yum倉庫 編譯安裝 軟件運行環境 API:Application Programming Interface     POSIX:Portable OS 程序源代碼–>預處理–>編譯–>…

    Linux干貨 2016-08-21
  • LVS類型及其調度算法

    LVS類型:     NAT:–>(DNAT) (多目標的DNAT)     DR:     TUN:     FULLNAT: LVS NAT的特性  &nbs…

    Linux干貨 2016-10-29
  • N22 網絡班-第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。   2、取出最后登錄到當前系統的用戶的相關信息。   3、取出當前系統上被用戶當作其默認shell的最多的那個shell。   4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxus…

    Linux干貨 2016-09-06
  • 第八周作業

    1. 寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;     在線的主機使用綠色顯示;     不在線的主機使用紅色顯示; #!/bin/bash # for i in {1..254};do         pi…

    Linux干貨 2017-02-24
  • 第四周

    查看鏈接:http://note.youdao.com/noteshare?id=317ec635a5f28f2681421fd7c9a60f27

    Linux干貨 2016-09-19
  • N22-妙手-第一周博客作業

           描述計算機的組成及其功能 1946年馮諾依曼提出馮 諾依曼結構,也稱普林斯頓結構,即一種將程序指令存儲器和數據存儲器合并在一起的存儲器結構。根據他的結構,計算機組成是: (1)運算器:負責數據的算術運算和邏輯運算 (2)控制器:  負責對程序信息和數據進行分析,控制并協調其輸…

    Linux干貨 2016-08-15

評論列表(1條)

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

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

欧美性久久久久