天天看點

Shell程式設計學習總結

Shell程式設計總結

一、Hello World

建立檔案test.sh

然後編輯代碼:

cd 到目标目錄下:

另一種運作方式:

二、變量

變量名要求:

a)     隻能是數字,字元,下劃線,并且首字母不能是數字

b)     中間不能有空格,但是可以有下劃線

c)      不能用關鍵詞

使用變量:

花括号加不加都行,加花括号隻是友善解釋器識别變量邊界。

另外變量和運算符之間不能有空格。

隻讀變量

隻讀變量意味着不能更改

删除變量

echo myshell #可以看到什麼也沒輸出

變量類型

a)     局部變量:隻在shell中起作用,shell運作的時候其他指令不能調用它

b)     環境變量:shell運作的時候,其他指令可以調用的

c)      shell變量:是由shell程式設定的特殊變量,有局部變量也有環境變量,這些變量是保證shell的正常運作

shell字元串

a)     單引号:

                          i.          任何字元都會原樣輸出,單引号裡面的變量無效

                         ii.          單引号裡面不能出現單引号(轉義的也不行)

b)     雙引号

                          i.          雙引号裡可以有變量

                         ii.          雙引号裡可以出現轉義字元

eg:

拼接字元:

擷取字元串長度

提取子串

這個地方運作的時候用sh test.sh可能會不相容,可以用 chmod +x ./test.sh運作

查找子串

shell數組

shell隻支援一維數組

a)     格式:

              數組名=(val1 val2…) #用空格分離

b)     随機通路下标:

c)      讀取數組:

                          i.          ${數組名[下标]}

                         ii.          讀取全部元素${數組名[@]}

d)     擷取長度

# 取得數組元素的個數

length=${#數組名[@]}

# 或者

length=${#數組名[*]}

# 取得數組單個元素的長度

lengthn=${#數組名[n]}

shell注釋

前面加#

三、shell傳遞參數

傳遞參數的格式,$n,$0表示執行檔案名,$1表示第一個參數,之後以此類推:

       A+B的小例子:

Shell程式設計學習總結

       幾個特殊符号:

參數處理

說明

$#

傳遞到腳本的參數個數

$*

一第一個單字元顯示所有腳本傳遞的參數。

$$

腳本運作的目前程序ID号

$!

背景運作的最後一個程序的ID号

$@

與$*相同,使用時加引号,是傳回每個參數

$-

顯示shell使用的目前選項,與set指令功能相同

$?

顯示最後指令的退出狀态。0表示沒有錯誤,其他任何值都表示有錯誤。

四、shell基本運算符

a)     基本包括:算數運算符、關系運算符、布爾運算符、字元串運算符、檔案測試運算符。

bash不支援原生的數學運算,可以通過其他指令來實作,awk和expr

b)     算數運算符

運算符

舉例

+

加法

`expr $a + $b`

-

減法

`expr $a - $b`

*

乘法

`expr $a * $b`

/

除法

`expr $a / $b`

%

取餘

`expr $a % $b`

=

指派

a=$b

==

相等,傳回true

[$a == $b]

!=

不相等,傳回true

[$a != $b]

c)      關系運算符

-eq

兩個數是否相等

[ $a –eq $b ]

-ne

兩個數是否不相等

[ $a –ne $b ]

-gt

左邊是否大于右邊

[ $a –gt $b ]

-lt

左邊是否小于右邊

[ $a –lt $b ]

-ge

左邊是否大于等于右邊

[ $a –ge $b ]

-le

左邊是否小于等于右邊

[ $a –le $b ]

d)     布爾運算符

!

非運算

[ ! false ]

-o

或運算

[ $a –lt 20 –o $b –gt 100 ]

-a

與運算

[ $a –lt 20 –a $b –gt 100 ]

e)     邏輯運算符

&&

邏輯的AND

       [[ $a -lt 100 && $b -gt 100 ]]

||

       邏輯的 OR

[[ $a -lt 100 || $b -gt 100 ]]

f)      字元串運算符

檢測兩個字元串是否相等

[ $a = $b ]

檢測兩個字元串是否不等

[ $a != $b ]

-z

檢測字元串長度是否為零

[ -z $a ]

-n

檢測字元串長度是否不0

str

檢測字元串是否為空

[ $a ]

g)     檔案測試符

操作符

-b file

檢測檔案是否是塊裝置檔案

[ -b $file ]

-c file

檢測檔案是否是字元裝置檔案

[ -c $file ]

-d file

檢測檔案是否是目錄

[ -d $file ]

-f file

檢測檔案是否是普通檔案

[ -f $file ]

-g file

檢測檔案是否設定了SGID位

-k file

檢測檔案是否設定了黏着位

[ -k $file ]

-p file

檢測檔案是否有名管道

[ -p $file ]

-u file

檢測檔案是否設定了SUID位

[ -u $file ]

-r file

檢測檔案是否可讀

[ -r $file ]

-w file

檢測檔案是否可寫

[ -w $file ]

-x file

檢測檔案是否可執行

[ -x $file ]

-s file

檢測檔案是否為空

[ -s $file ]

-e file

檢測檔案是否存在

[ -e $file ]

五、echo指令

a)     顯示字元串

                 i.          echo “It is a test”

               ii.          雙引号可以省略:echo It is a test

b)     顯示轉義字元

                 i.          echo “\”It is a test \””

c)      顯示變量

d)     顯示換行

                 i.          echo –e “ok! \n” # -e 開啟轉義

e)     顯示不換行

                 i.          echo –e “ok! \c” # -e 開啟轉義

f)      将結果重定向至檔案

                 i.          echo “It is a test” > myfile

g)     原樣輸出到字元串,不進行轉移或取變量

                 i.          echo ‘$name\”’s

h)     顯示執行指令結果

                 i.          echo `date`  #這裡用的是反引号

六、Shell流程控制、

a)     if

文法格式:

b)     if else

c)      if else-if else

d)     for 循環

格式:

例子:

e)     while循環

f)      until循環

就像do-while和while循環的差別一樣

g)     case

就像switch。

h)     break、continue、esac

七、shell函數

              例子:

八、輸入輸出重定向

指令

Command > file

将輸出重定向到file

Command < file

将輸入重定向到file

Command >> file

将輸出以追加的方式重定向到file

n > file

将檔案描述符為n的檔案重定向到file

n >> file

将檔案描述符為n的檔案以追加的方式重定向到file

n >& m

将輸出檔案m和n合并

n <& m

将輸入檔案m和n合并

<< tag

将開始标記tag和結束标記tag之間的内容作為輸入

九、Shell檔案包含

       . filename #注意點号和檔案名中間有一空格

       source filename

執行個體:

test1.sh

test2.sh

我每天都在努力,隻是想證明我是認真的活着.