Shell腳本編程基礎

一、腳本語言跟編譯型語言的區別

    1、腳本語言

        不需編譯,由解釋器解釋執行;

         弱類型:變量類型;

         變量通常不需要實現聲明;

    2、編譯型語言

        事先編譯(源程序-->目標代碼-->鏈接-->執行);運行時不再依賴於編譯器;

        強類型;

        變量需要事先聲明;

二、變量類型

    1、本地變量

set VAR_NAME=value #定義變量
unset VAR_NAME #取消變量
${VAR_NAME} #引用變量

    作用範圍:當前shell進程

    2、局部變量  

local VAR_NAME=value #定義變量
unset VAR_NAME #取消變量
${VAR_NAME} #引用變量

    作用範圍:當前shell進程局部有效

    3、環境變量 

export VAR_NAME=value
unset VAR_NAME
${VAR_NAME}

    作用範圍:當前shell進程及其子shell進程

    4、位置變量:$1,$2,$3...

    5、特殊變量:$$,$?,$#,$@...

三、Bash Shell腳本    

# bash /path/to/script_file.sh

   1、 獨立執行:

        要有執行權限;

        定義好shebang, 即腳本的第一行:#!/path/to/explainer

例如:#!/bin/bash “#”只有腳本第一行的“#”有特殊意義外,其他行的都爲註釋行運行腳本時不執行。

    2、bash的配置文件

        profile類:/etc/profile, /etc/profile.d/*.sh, ~/.bash_profile
           聲明環境變量
            執行程序或腳本   

       bashrc類:/etc/bashrc, ~/.bashrc
           定義本地變量
           定義命令別名  

    3、變量命名規則

        只能包含字母數字和下劃線

        不能以數字開頭

        嚴格區分大小寫

        要做到見名知意

        命名規範,風格統一

        不能跟系統變量重名

    4、控制語句

        for

        while

        until

四、for循環

    事先提供一個元素列表,而後,使用變量去遍歷此元元素列表;每訪問一個元素,就執行一次循環體;直到元素訪問完畢。

    1、用法格式:

for VAR_NAME in 元素1 元素2 ...; do
語句1;
語句2;
...
done

    2、 腳本寫完在執行前測試有沒有語法錯誤,就以test.sh爲例

bash -n test.sh  #測試腳本有沒語法錯誤
chmod +x test.sh  #給腳本執行權限
./test.sh  #執行測試
bash -x test.sh #執行時顯示執行過程

 

   3、添加user1,user2,user3三個用戶,並配置與用戶名相同的祕密

#!/bin/bash
#
for UserName in user1 user2 user3; do
useradd $UserName
echo $UserName | passwd --stdin $UserName
done

    4、 寫一個腳本,顯示/etc/inittab, /etc/rc.d/rc.sysinit, /etc/fstab三個文件各有多少行

for FileName in /etc/inittab /etc/rc.d/rc.sysinit /etc/fstab; do
wc -l $FileName
done

    5、使用for循環統計/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#開頭的行的行數和空白行數

#!/bin/bash
for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do
echo "$File:"
echo -e "\t#lines: `grep "^#" $File | wc -l`"
echo -e "\tspace lines: `grep "^$" $File | wc -l`"
done

    6、使用for循環,複製/etc/fstab、/etc/inittab和/etc/rc.d/init.d/functions文件至/tmp/目錄中,並重命名爲原有的名稱之後加當前日期,如第一個文件爲/tmp/fstab-2013-07-15

#!/bin/bash
for File in /etc/fstab /etc/inittab /etc/rc.d/init.d/functions; do
cp $File /tmp/$File-`date +%F`
done

    7、生成數字序列

    {}:{起始數字..結束數據},例如{1..100}表示從1到100之間的所有正整數;    
    `seq [起始數字] [步長] 結束數字`  

    8、使用for循環取出每個用戶用戶名和Shell

#!/bin/bash
LINES=`wc -l /etc/passwd | cut -d' ' -f1` #看清楚這裏用的是反引號!
for I in `seq 1 $LINES`; do
head -$I /etc/passwd | tail -1 | cut -d: -f1,7
done

    9、寫一個腳本,計算100以內所有整數的和

#!/bin/bash
#
Sum=0
for I in {1..100}; do  #這裏使用的就是數字序列
Sum=$[$Sum+$I]
done
echo "The sum is: $Sum."

    10、寫一個腳本,計算100以內,所有偶數的和,以及所有奇數的和 

#!/bin/bash
EvenSum=0
OddSum=0
for I in `seq 1 2 100`; do
OddSum=$[$OddSum+$I]
done
for I in `seq 2 2 100`; do
EvenSum=$[$EvenSum+$I]
done
echo "Even Sum: $EvenSum; Odd Sum: $OddSum."

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章