總結bash編程基礎,引入函數結構化編程。

        bash——Bourn Again Shell 是一種解釋器解釋執行的腳本語言,也能夠實現編程功能。shell

bash變量類型:編程

        本地變量:只對當前shell有效vim

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

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

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

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

指定變量類型:declare測試

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

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

        declare -a variable:聲明一個數組

語言控制結構:

        一、順序結構

        二、選擇執行

        三、循環執行

bash的for循環:

        for variable in Element list ;do

        sentence one

        sentence two

        ......

        done

例1:寫一個腳本使用for建立10個用戶user1..user10,併爲它們設置密碼。

wKioL1Nm5wGDIg9KAACPHLkZcdc486.jpg

例2:寫一個腳本,使用for循環,複製/etc/fstab、/etc/inittab、/etc/rc.d/init.d/functions文件至/tmp目錄中,並重命名爲原有的名稱以後加當前的日期。

wKiom1Nm6p_SP5frAACqxF53o5A107.jpg

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

        寫一個腳本,計算100之內全部整數的和。

wKioL1Nm7hmTBkDpAABp7qfYTU4098.jpg

判斷:

        if 條件;then

        sentence one

        sentence two

        .....

        else

        sentence one

        sentence two

         .....

        fi

例1:讓用戶輸入一個用戶,若是其ID號大於499就說明是普通用戶,不然就說明是管理員或系統用戶。

wKioL1Nm-aiTvaBtAADDbZjRn54714.jpg

例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,則文件前兩行爲:
#!/bin/bash
# Date: 2013-07-19
若是給出了-D "some infomation",則文件前兩行爲:
#!/bin/bash
# Description: some infomation
其它任何參數,均提示錯誤並退出;

若是沒有退出,則使用vim打開此文件,並使用光標默認處於最後一行;

保存退出後,若是文件有語法錯誤提示用戶有錯誤;

若是沒有語法錯誤,則給些文件賦予執行權限;

wKioL1NnCoyS2sGJAAGKzkbfH_g723.jpg

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}」

wKiom1NnIUyT_KZnAAMIYJ__fZ8121.jpg

再來一個例子?

例2:寫一個腳本(前提:請爲虛擬機新增一塊硬盤,假設它爲/dev/sdb),爲指定的硬盤建立分區:
一、列出當前系統上全部的磁盤,讓用戶選擇,若是選擇quit則退出腳本;若是用戶選擇錯誤,就讓用戶從新選擇;
二、當用戶選擇後,提醒用戶確認接下來的操做可能會損壞數據,並請用戶確認;若是用戶選擇y就繼續,n就退出;不然,讓用戶從新選擇;
三、抹除那塊硬盤上的全部分區(提示,抹除全部分區後執行sync命令,並讓腳本睡眠3秒鐘後再分區);併爲其建立三個主分區,第一個爲20M,第二個爲512M, 第三個爲128M,且第三個爲swap分區類型;

wKioL1Nosu6hSz4PAANeG58syGM769.jpg

bash編程之函數,結構化編程:

 寫一個腳本,完成如下功能:
說明:此腳本能於同一個repo文件中建立多個Yum源的指向;
一、接受一個文件名作爲參數,此文件存放至/etc/yum.repos.d目錄中,且文件名以.repo爲後綴;要求,此文件不能事先存,不然,報錯;
二、在腳本中,提醒用戶輸入repo id;若是爲quit,則退出腳本;不然,繼續完成下面的步驟;
三、repo name以及baseurl的路徑,然後以repo文件的格式將其保存至指定的文件中;
四、enabled默認爲1,而gpgcheck默認設定爲0;
五、此腳本會循環執行屢次,除非用戶爲repo id指定爲quit;

wKioL1Nos2_g8ojfAAKySINADZM174.jpg

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

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

相關文章
相關標籤/搜索