Shell是一個命令解釋器,它會解釋並執行命令行提示符下輸入的命令。除此以外,Shell還有另外一個功能,若是要執行多條命令,它能夠將這組命令存放在一個文件中,而後能夠像執行Linux系統提供的其餘程序同樣執行這個文件,這個命令文件就叫作Shell程序或者Shell腳本。當運行這個文件時,它會像在命令行輸入這些命令同樣順序地執行它們。python
Shell腳本支持變量、命令行參數、交互式輸入、函數模塊、各類控制語句等高級編程語言的特性,如if、case、while和for等。利用Shell程序設計語言能夠編寫出功能很是複雜的腳本程序,把大量的任務自動化,尤爲是那些須要輸入大量命令而在執行過程當中不太須要與用戶進行干預的系統管理任務。編程
爲了讓Shell能讀取而且執行Shell程序,Shell腳本的文件權限必須被設置爲可讀和可執行。爲了讓Shell能夠找到程序,能夠選擇輸入徹底路徑名,或者將這個腳本的路徑放在PATH環境變量指定的路徑列表中。Shell腳本不是複雜的程序,它是由上往下逐行解釋執行的。腳本的第一行老是以「#!<Shell解釋器文件路徑>」開始,用來指定該腳本是使用那種Shell進行解釋執行。bash
1)使用VI或者其餘任意的文本編輯工具建立一個名爲HelloWorld.sh的文件,並在其中加入如下內容:編程語言
[root@localhost ~]# vi HelloWorld.sh #!/bin/bash #The first Shell script echo "Hello World!"
2)爲HelloWorld.sh文件添加執行權限;函數
[root@localhost ~]# chmod +x HelloWorld.sh
3)運行HelloWorld.sh腳本,查看運行結果;工具
[root@localhost ~]# ./HelloWorld.sh
Hello World!
編寫Shell腳本時,有時要先測試字符串是否一致、數字是否相等或者檢查文件狀態,基於這些測試的結果再作下一步的操做。Shell腳本的條件測試能夠用於測試字符串、文件狀態和數字。測試
測試完成後能夠經過「$?」獲取測試的結果,其中0爲正確,1爲錯誤。ui
數值測試用於對兩個數值進行比較並得出判斷結果,包括:等於、不等於、大於、大於等於、小於、小於等於。spa
數值判斷的格式:[ 數值1 關係運算符 數值2 ]命令行
方括號與條件之間必需要有空格。
數值測試的關係運算符 | |
關係運算符 | 說明 |
-eq | 兩個數值相等 |
-ne | 兩個數值不相等 |
-gt | 第一個數大於第二個數 |
-lt | 第一個數小於第二個數 |
-ge | 第一個數大於等於第二個數 |
-le | 第一個數小於等於第二個數 |
測試兩個數值是否相等;
[root@localhost ~]# [ 1024 -eq 1024 ] //測試1024是否等於1024 [root@localhost ~]# echo $? 0 //兩個數值相等 修改第一個數值爲1124後再次進行測試。 [root@localhost ~]# [ 1124 -eq 1024 ] [root@localhost ~]# echo $? 1 //兩個數值不相等 [root@localhost ~]# number1=500 //number1爲500 [root@localhost ~]# number2=254 //number2爲254 [root@localhost ~]# [ $number1 -gt $number2 ] [root@localhost ~]# echo $? 0 //number1大於number2 [root@localhost ~]#
字符串測試能夠對兩個字符串的值進行比較,也能夠測試單個字符串的值是否爲空或者非空。
字符串測試的格式:[ 關係運算符 字符串 ]或者[ 字符串1 關係運算符 字符串2 ]
字符串測試的關係運算符 | |
關係運算符 | 說明 |
= | 兩個字符串相等 |
!= | 兩個字符串不相等 |
-z | 字符串爲空 |
-n | 字符串不爲空 |
要測試兩個字符串是否相等 [root@localhost ~]# [ "abc" = "abc" ] [root@localhost ~]# echo $? 0 //兩個字符串相等 把第一個字符串更改成bac後進行測試 [root@localhost ~]# [ "bac" = "abc" ] [root@localhost ~]# echo $? 1 //兩個字符串不相等 若是把運算符改成「!=」 [root@localhost ~]# [ "bac" != "abc" ] [root@localhost ~]# echo $? 0 判斷環境變量是否爲空或者非空 [root@localhost ~]# [ -z $python1 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ -n $python1 ] [root@localhost ~]# echo $? 0 //python1變量爲空 [root@localhost ~]# python1="test" //對python1變量進行賦值 [root@localhost ~]# [ -z $python1 ] [root@localhost ~]# echo $? 1 //python1變量不爲空 [root@localhost ~]#
Linux的Shell腳本支持對文件狀態的檢測,包括檢測文件的類型、文件的權限和文件的長度等;
文件狀態測試的格式:[ 關係運算符 字符串 ]
文件狀態測試的關係運算符 | |
關係運算符 | 說明 |
-d | 目錄 |
-f | 通常文件 |
-L | 連接文件 |
-r | 可讀 |
-w | 可寫 |
-x | 可執行 |
-u | 設置了suid |
-s | 文件長度大於0、非空 |
[root@localhost 20190105]# ll 總用量 4 -rwxr-xr-x. 1 root root 56 6月 4 07:55 HelloWorld.sh [root@localhost 20190105]# [ -r HelloWorld.sh ] [root@localhost 20190105]# echo $? 0 //HelloWorld.sh 文件可讀 [root@localhost 20190105]# [ -w HelloWorld.sh ] [root@localhost 20190105]# echo $? 0 //HelloWorld.sh 文件可寫 [root@localhost 20190105]# [ -x HelloWorld.sh ] [root@localhost 20190105]# echo $? 0 //HelloWorld.sh 文件可執行 [root@localhost 20190105]#
邏輯操做符分如下3種:
-a:邏輯與,只有當操做符兩邊的條件均爲真時,結果爲真,不然爲假。
-o:邏輯或,操做符兩邊的條件只要有一個爲真,結果爲真,只有當兩邊全部條件爲假時,結果爲假。
!:邏輯否,條件爲假,結果爲真。
若是要測試兩個文件的狀態 [root@localhost 20190105]# ll test1 test2 -rw-rw-r--. 1 root root 0 6月 4 09:25 test1 -rw-rw-r--. 1 root root 0 6月 4 09:25 test2 [root@localhost 20190105]# [ -r test1 -a -r test2 ] //測試文件 test1 和 test2 是否均可讀 [root@localhost 20190105]# echo $? 0 [root@localhost 20190105]# [ -x test1 -o -x test2 ] //測試文件 test1 和 test2 是否至少有一個可執行 [root@localhost 20190105]# echo $? 1 若是要測試兩個數值變量 [root@localhost 20190105]# number1=10 [root@localhost 20190105]# number2=20 [root@localhost 20190105]# [ $number1 -eq 10 -a $number2 -gt 20 ] //測試是否number1 大於10 且 number2 大於20 [root@localhost 20190105]# echo $? 1 若是要測試文件test1 是否爲不可讀 [root@localhost 20190105]# ls -l test1 -rw-rw-r--. 1 root root 0 6月 4 09:25 test1 [root@localhost 20190105]# [ ! -r test1 ] //測試文件test1 是否爲不可讀 [root@localhost 20190105]# echo $? 1 [root@localhost 20190105]#