腳本編程--shell

1、shell腳本shell

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

2、shell執行腳本bash

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

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

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

  b.執行的方式:spa

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

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

3、shell執行過程
htm

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

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

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

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

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

4、shell變量

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

    一、環境變量

     環境變量能夠從父進程傳給子進程,所以Shell進程的環境變量能夠從當前Shell進程傳給fork

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

    二、本地變量

    只存在於當前Shell進程,用set命令能夠顯示當前Shell進程中定義的全部變量(包括本地變 量

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

    VARNAME=value

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

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

5、變量引用    

    若是一個變量叫作VARNAME,用${VARNAME}能夠表示它的值,在不引發歧義的狀況下也能夠VARNAME表示它的值。經過如下例子比較這兩種表示法的不一樣:

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

    注意,在定義變量時不用$,取變量值時要用$。和C語言不一樣的是,Shell變量不須要明肯定義

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

6、文件名代換  

    通配符 * : 匹配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命令的參數其實是這兩個文件名,而不是一個匹配字符串。

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

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

DATE=`date`
echo $DATE

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

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

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

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

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

8、轉義字符\

    一、好比建立一個文件名爲「$ $」(中間有空格)的文件能夠這樣:

    $ touch \$\ \$

    二、好比建立一個文件名爲「-」開始的文件能夠這樣:

    touch ./-hello


9、單引號  

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

wKiom1dtBhLCdmaUAABHgPtvT9c385.jpg-wh_50

10、雙引號

    雙引號用於保持引號內全部字符的字面值(回車也不例外),但如下狀況除外:  

    $加變量名能夠取變量的值

    反引號仍表示命令替換

    \$ 表示$的字面值

    \` 表示`的字面值

    \" 表示"的字面值

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

wKiom1dtBnWRBSIDAADBcRQu7XE113.jpg-wh_50

相關文章
相關標籤/搜索