天天看點

總結bash程式設計基礎,引入函數結構化程式設計。

   bash——Bourn Again Shell 是一種解釋器解釋執行的腳本語言,也可以實作程式設計功能。

bash變量類型:

        本地變量:隻對目前shell有效

        局部變量:local variable 僅對局部代碼有效

        環境變量:export variable 對目前shell及其子shell有效

        位置變量:$1,$2,$3

        特殊變量:$#,$!,$?,$@

指定變量類型:declare

        declare -i variable:聲明一個整型變量

        declare -x variable:聲明一個環境變量

        declare -a variable:聲明一個數組

語言控制結構:

        1、順序結構

        2、選擇執行

        3、循環執行

bash的for循環:

        for variable in Element list ;do

        sentence one

        sentence two

        ......

        done

例1:寫一個腳本使用for建立10個使用者user1..user10,并為它們設定密碼。

<a href="http://s3.51cto.com/wyfs02/M00/25/C8/wKioL1Nm5wGDIg9KAACPHLkZcdc486.jpg" target="_blank"></a>

例2:寫一個腳本,使用for循環,複制/etc/fstab、/etc/inittab、/etc/rc.d/init.d/functions檔案至/tmp目錄中,并重命名為原有的名稱之後加目前的日期。

<a href="http://s3.51cto.com/wyfs02/M00/25/C8/wKiom1Nm6p_SP5frAACqxF53o5A107.jpg" target="_blank"></a>

如何在shell腳本中進行算術運算:

        寫一個腳本,計算100以内所有整數的和。

<a href="http://s3.51cto.com/wyfs02/M01/25/CE/wKioL1Nm7hmTBkDpAABp7qfYTU4098.jpg" target="_blank"></a>

判斷:

        if 條件;then

        .....

        else

         .....

        fi

例1:讓使用者輸入一個使用者,如果其ID号大于499就說明是普通使用者,否則就說明是管理者或系統使用者。

<a href="http://s3.51cto.com/wyfs02/M02/25/CF/wKioL1Nm-aiTvaBtAADDbZjRn54714.jpg" target="_blank"></a>

例2:寫一個腳本,其可以接受三個參數,最後一個參數為檔案名,但參數可變化,形如:

 script.sh  -a tuchao  /tuchao/test1.sh

 script.sh  -b 2013-07-19  /tuchao/test1.sh

 script.sh  -c 'some infomation' /tuchao/test1.sh

此腳本能夠建立/magedu.com/scripts/test1.sh檔案,并且,如果給出了-a MageEdu,則檔案前兩行為:

#!/bin/bash

# Author: MageEdu

如果給出了-d 2013-07-19,則檔案前兩行為:

# Date: 2013-07-19

如果給出了-D "some infomation",則檔案前兩行為:

# Description: some infomation

其它任何參數,均提示錯誤并退出;

如果沒有退出,則使用vim打開此檔案,并使用光标預設處于最後一行;

儲存退出後,如果檔案有文法錯誤提示使用者有錯誤;

如果沒有文法錯誤,則給些檔案賦予執行權限;

<a href="http://s3.51cto.com/wyfs02/M00/25/D0/wKioL1NnCoyS2sGJAAGKzkbfH_g723.jpg" target="_blank"></a>

bash程式設計之case:

case variable in 

           value1 )

            ;;

            value2)

            value3)

            * )

esac

例:寫一個腳本:可以接受一個參數,其使用形式如下:

 sevtest.sh {start|stop|restart|status}

如果參數為start,且/var/lock/subsys/sevtest檔案不存在,則建立空檔案/var/lock/subsys/sevtest,并顯示“Starting Server successfully.”;否則,顯示“Server is already running.”

 如果參數為stop,且/var/lock/subsys/sevtest檔案存在,則删除檔案/var/lock/subsys/sevtest,并顯示“Stop Server finished.”;否則,顯示“Server is stopped yet.”

如果參數為restart,則删除檔案/var/lock/subsys/sevtest後重新建立,并顯示“Restarting Server successfully.”;

如果參數為status,那麼:

 如果/var/lock/subsys/Server檔案存在,則顯示為“Server is running.”

 否則,則顯示為“Server is stopped.”

其它任何參數:則顯示“sevtest.sh {start|stop|restart|status}”

<a href="http://s3.51cto.com/wyfs02/M01/25/D1/wKiom1NnIUyT_KZnAAMIYJ__fZ8121.jpg" target="_blank"></a>

再來一個例子?

例2:寫一個腳本(前提:請為虛拟機新增一塊硬碟,假設它為/dev/sdb),為指定的硬碟建立分區:

1、列出目前系統上所有的磁盤,讓使用者選擇,如果選擇quit則退出腳本;如果使用者選擇錯誤,就讓使用者重新選擇;

2、當使用者選擇後,提醒使用者确認接下來的操作可能會損壞資料,并請使用者确認;如果使用者選擇y就繼續,n就退出;否則,讓使用者重新選擇;

3、抹除那塊硬碟上的所有分區(提示,抹除所有分區後執行sync指令,并讓腳本睡眠3秒鐘後再分區);并為其建立三個主分區,第一個為20M,第二個為512M, 第三個為128M,且第三個為swap分區類型;

<a href="http://s3.51cto.com/wyfs02/M02/26/00/wKioL1Nosu6hSz4PAANeG58syGM769.jpg" target="_blank"></a>

bash程式設計之函數,結構化程式設計:

 寫一個腳本,完成以下功能:

說明:此腳本能于同一個repo檔案中建立多個Yum源的指向;

1、接受一個檔案名做為參數,此檔案存放至/etc/yum.repos.d目錄中,且檔案名以.repo為字尾;要求,此檔案不能事先存,否則,報錯;

2、在腳本中,提醒使用者輸入repo id;如果為quit,則退出腳本;否則,繼續完成下面的步驟;

3、repo name以及baseurl的路徑,而後以repo檔案的格式将其儲存至指定的檔案中;

4、enabled預設為1,而gpgcheck預設設定為0;

5、此腳本會循環執行多次,除非使用者為repo id指定為quit;

<a href="http://s3.51cto.com/wyfs02/M00/26/00/wKioL1Nos2_g8ojfAAKySINADZM174.jpg" target="_blank"></a>

 終于寫完了,bash的内容有點多。   以上代碼都是小菜手寫測試截圖。

有問題歡迎與我交流QQ:1183710107 

本文轉自qw87112 51CTO部落格,原文連結:http://blog.51cto.com/tchuairen/1406577