腳本編程--shell

一、shell腳本

    用各類命令預先放入到一個文件中,方便一次性執行的一個程序文;將一些shell的語法與指令寫在裏面,然後用正規表示法,管道命令以及數據流重導向等功能,以達到我們所想要的處理目的。Shell就是一個命令行解釋器,它的作用就是遵循一定的語法將輸入的命令加以解釋並傳給系統。它爲用戶提供了一個向Linux發送請求以便運行程序的接口系統級程序,用戶可以用Shell來啓動、掛起、停止甚至是編寫一些程序。

二、shell執行腳本

    1、touch "文件名".sh,,例如 touch test.sh ->vim test.sh ,編寫如下:

  1 #!/bin/bash
  2 echo "hello world"
  3 cd ..;
  4  ls

  a.Shell腳本中用#表示註釋,但如果#位於第一行開頭,是則例外,它表示該腳本使用後面指定的解釋器/bin/sh解釋執行

  b.執行的方式:

    第一種執行方式: chmod +x test.sh

    第二種執行方式:/bin/bash test.sh

三、shell執行過程

    1、交互Shell(bash)fork/exec一個子Shell(sh)用於執行腳本,父進程bash等待子進程sh終止

    2、sh讀取腳本中的cd ..命令,調用相應的函數執行內建命令,改變當前工作目錄爲上一級目 錄。

    3、sh讀取腳本中的ls命令,fork/exec這個程序,列出當前工作目錄下的文件,sh等待ls終止。

    4、ls終止後,sh繼續執行,讀到腳本文件末尾,sh終止。

    5、sh終止後,bash繼續執行,打印提示符等待用戶輸入

四、shell變量

    按照慣例,Shell變量由全大寫字母加下劃線組成,有兩種類型的Shell變量:

    1、環境變量

     環境變量可以從父進程傳給子進程,因此Shell進程的環境變量可以從當前Shell進程傳給fork

出來的子進程。用printenv命令可以顯示當前Shell進程的環境變量

    2、本地變量

    只存在於當前Shell進程,用set命令可以顯示當前Shell進程中定義的所有變量(包括本地變 量

和環境變量)和函數。環境變量是任何進程都有的概念,而本地變量是Shell特有的概念。在Shell中,環境變量和本地變量的定義和用法相似。在Shell中定義或賦值一個變量:

    VARNAME=value

    注意等號兩邊都不能有空格,否則會被Shell解釋成命令和命令行參數。一個變量定義後僅

存在於當前Shell進程,它是本地變量,用export命令可以把本地變量導出爲環境變量

五、變量引用    

    如果一個變量叫做VARNAME,用${VARNAME}可以表示它的值,在不引起歧義的情況下也可以VARNAME表示它的值。通過以下例子比較這兩種表示法的不同:

echo $SHELL
echo $SHELLabc
echo ${SHELL}
echo ${SHELL}abc

    注意,在定義變量時不用$,取變量值時要用$。和C語言不同的是,Shell變量不需要明確定義

類型,事實上Shell變量的值都是字符串,比如我們定義VAR=45,其實VAR的值是字符串45而非整 數。Shell變量不需要先定義後使用,如果對一個沒有定義的變量取值,則值爲空字符串。

六、文件名代換  

    通配符 * : 匹配0個或多個任意字符

    ? : 匹配一個任意字符

    [若干字符] : 匹配方括號中任意一個字符的一次出現  

    $ ls /dev/ttyS*

    $ ls ch0?.doc

    $ ls ch0[0-2].doc

    $ ls ch[012][0-9].doc

    注意,Globbing所匹配的文件名是由Shell展開的,也就是說在參數還沒傳給程序之前已經展開

了,比如上述ls ch0[012].doc命令,如果當前目錄下有ch00.doc和ch02.doc,則傳給ls命令的參數實際上是這兩個文件名,而不是一個匹配字符串。

七、命令代換:`或 $()

    1、由反引號括起來的也是一條命令,Shell先執行該命令,然後將輸出結果立刻代換到當前命令行中

DATE=`date`
echo $DATE

例如定義一個變量存放date命令的輸出:命令代換也可以用$()表示: $ DATE=$(date)

    2、算術代換:$(())

    用於算術計算,$(())中的Shell變量取值將轉換成整數,例如:

 VAR=45
 echo $(($VAR+3))

    $(())中只能用+-*/和()運算符,並且只能做整數運算。

八、轉義字符\

    1、比如創建一個文件名爲“$ $”(中間有空格)的文件可以這樣:

    $ touch \$\ \$

    2、比如創建一個文件名爲“-”開始的文件可以這樣:

    touch ./-hello


九、單引號  

    和C語言不一樣,Shell腳本中的單引號和雙引號一樣都是字符串的界定符,而不是字符的界定符。單引號用於保持引號內所有字符的字面值,即使引號內的\和回車也不例外,但是字符串中不能出現單引號。如果引號沒有配對就輸入回車,Shell會給出續行提示符,要求用戶把引號配上對。例如:

wKiom1dtBhLCdmaUAABHgPtvT9c385.jpg-wh_50

十、雙引號

    雙引號用於保持引號內所有字符的字面值(回車也不例外),但以下情況除外:  

    $加變量名可以取變量的值

    反引號仍表示命令替換

    \$ 表示$的字面值

    \` 表示`的字面值

    \" 表示"的字面值

    \\ 表示\的字面值 除以上情況之外,在其它字符前面的\無特殊含義,只表示字面值:

wKiom1dtBnWRBSIDAADBcRQu7XE113.jpg-wh_50



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