【學習】Linux Shell指令碼程式設計
1.指令碼的組成和執行
Linux shell指令碼的結構並不複雜,其主要由變數、內部命令以及shell的語法結構和一些函式、其他命令列的程式等組成,以下是一個簡單的shell指令碼。
#!/bin/bash #This is a first scriptechoecho Hello Bash Script!echo
一般使用字尾名“.sh”來表示shell指令碼,此指令碼中的第一行使用“#!”開頭,表明要用/bin/bash來解釋和執行這個指令碼檔案,也可以使用/bin/sh來代替。實際上,/bin/sh是一個指向/bin/bash的軟連結(soft link),也就是說,在執行/bin/sh 時,它呼叫的命令與/bin/bash 是相同的。可以使用如下的命令來檢視/bin/bash檔案。
autotest@xa-stf-u1804:~/Documents$ ll -la /bin/bash-rwxr-xr-x 1 root root 1113504 Apr 4 2018 /bin/bash*
接著是關於這個指令碼的一些描述資訊,這些描述資訊包括編寫指令碼的時間、人物以及指令碼的功能等資訊,這也許是為了方便後來對指令碼的維護。
之後是指令碼所要實現的功能,這是指令碼最為主要的部分,也是編寫指令碼的目的。當指令碼編寫完成之後儲存指令碼並退出,執行指令碼可以事先使用chmod命令為該指令碼檔案新增可執行權,然後再執行,或者接著使用bash後接指令碼檔名執行。
[scat@Scat ~]$ chmod u+x helloscript.sh # 新增可執行權 [scat@Scat ~]$ ./helloscript.sh# 執行指令碼檔案 Hello Bash Script![scat@Scat ~]$ bash helloscript.sh# 使用bash 來執行 Hello Bash Shell Script!
在一個剛建立的指令碼檔案中,是沒有可執行許可權的。因此在執行它時會出現不允許執行的提示。而在新增可執行許可權之後就可以執行。
2.指令碼執行過程的追蹤
對於一個剛完成編寫的程式碼程式,無論技術有多麼熟練都難免出現錯誤,所出現的這些錯誤包括語法錯誤和邏輯錯誤。若是遇到語法錯誤還好,要是邏輯錯誤那就麻煩了。這是因為有邏輯錯誤的程式可以正常執行,但所執行的結果並非想要的。
對於所編寫的指令碼,可以使用set命令進行執行時的跟蹤。利用set命令有助於完成程式碼、發現程式碼中的錯誤以及修改和整理程式碼,使得所編寫的程式碼更為完整。看如下一個名為test.sh的指令碼。
#!ban/bash # #set -xecho -n "are you a student?"read answerif [ $answer = Y ]then echo "yes,I am a student"else echo "No,I am a teacher"fi
完成指令碼的編寫之後,將其儲存並退出。接著進行授權,然後執行指令碼檔案。或者使用bash直接執行,操作如下。
[scat@Scat ~]$ bash test.sh # 執行指令碼檔案 are you a student?Y # 輸入Y確認,需要大寫 yes,I am a student [scat@Scat ~]$ bash test.share you a student?N # 此次輸入N No,I am a teacher
以上只是一些簡單的輸出,沒有任何其他引數的輸出。接著使用set命令來實現對指令碼的跟蹤。
首先開啟set的功能,即將set命令前面的#號去掉,之後儲存所做修改並退出,然後執行bash命令。
[scat@Scat ~]$ bash test.sh # 執行test.sh檔案+echo-n 'are you a student?'are you a student?+read answer Y # 輸入Y,要大寫+'[' Y = Y ']'yes,I am a student [scat@Scat ~]$ bash test.sh # 再次執行指令碼檔案+echo-n 'are you a student?'are you a student?+read answer N # 此次輸入N+'[' N = Y ']'+echo 'No,I am a teacher'No,I am a teacher
在啟動set命令功能之後,當執行指令碼檔案時出現了一些以“+”開頭的行。也就是說,使用set命令可對指令碼進行完全的跟蹤。可以透過跟蹤來發現理想的輸出與實際輸出的區別,然後進行修改,最終達到所需的要求。 3.指令碼中的條件測試 下面介紹指令碼中的條件測試。這方面的內容涉及數值的測試、字串以及數字等內容。 (1)數值測試 對數值進行測試,其主要是對兩個數值進行比較,比較的結果包括兩個數值相等、不相等以及大於和小於等,表中列出了常用的數值關係運算子。 [object Object]
下面演示如何使用這些關係運算子進行數值的測試。其實,進行數值比較的測試非常簡單。首先使用編輯器vi建立名為test1.sh的檔案,然後寫入需要測試的數值,儲存之後退出。
#!ban/bash #
[ 36 -eq 36 ] # 判斷36是否等於36echo $?echo # 使用echo命令輸出一個空格[ 36 -eq 35 ] # 判斷36是否等於35echo $?echo[ 36 -gt 30 ] # 判斷36是否大於30echo $?
以上的每條判斷語句都可以單獨來寫,這裡為了方便而將它們寫在一起進行測試。完成以上的操作之後,接著開始執行指令碼檔案。注意,輸出0表示正確,也就是說,條件成立,而1則相反,執行檔案及測試結果如下所示。
[scat@Scat ~]$ bash test1.sh0 # 第一個輸出為0,說明條件成立1 # 第二個輸出為1,說明條件不成立0 # 輸出0,說明條件成立
(2)字串測試
對於字串的測試,可以對單個字串進行,也可以對多個字串進行。可透過對兩個字串的值進行比較來測試字串是否相等。表15-2列出了進行字串測試時常用的關係運算子。
接著演示如何使用這些關係運算子進行字串的測試。其實,進行字串比較的測試非常簡單。首先建立名為test2.sh的指令碼檔案,其內容如下。
01 #!/bin/bash02 [ "ccc" = "ccb" ]# 使用"="來判斷這兩個字串是否相等,不用雙引號也行03 echo $?04 echo05 [ "ccc" != "ccb" ] # 判斷字串是否不相等06 echo $?07 echo08 test2="abc"# 定義test2 的值為abc09 [-z $test2 ]# 判斷test2 是否為空10 echo $?11 exit 0
完成以上的寫入並進行儲存之後,接著開始執行指令碼檔案。執行檔案及測試結果如下所示。
1 # 輸出1,表示第一個測試結果的成立0 # 輸出0,表示測試結果成立1
(3)邏輯運算子
在完成以上指令碼檔案的建立之後,到目前為止已經存在4個指令碼檔案。在這4個指令碼檔案中,只有一個檔案擁有可執行權,下面使用ll命令列出這些指令碼檔案。
[scat@Scat ~]$ ll total 16-rwxrw-r-- 1 scat scat 76 Nov 6 14:05 helloscript.sh-rw-rw-r-- 1 scat scat 77 Nov 6 19:13 test1.sh-rw-rw-r-- 1 scat scat 91 Nov 6 19:23 test2.sh-rw-rw-r-- 1 scat scat 159 Nov 6 15:17 test.sh
對於這些檔案,若需要對其型別、許可權以及長度等進行檢測時,可使用檔案狀態檢測運算子(如表15-3所示)來測試,如下是一個簡單的例子。
01 [-x helloscript.sh ] # 判斷helloscript.sh是否有可執行權02 echo $?03 echo04 [-x test1.sh # 判斷test1.sh是否有可執行權05 echo $?
完成之後,將內容進行儲存並退出,之後執行test3.sh檔案。
0 # 輸出0,表示helloscript.sh檔案擁有可執行權1 # 輸出1,表示test1.sh沒有可執行權
本節的重點是針對多個條件進行測試。要對多個條件進行測試,需要使用一些邏輯運算子,透過邏輯運算子將這些需要進行測試的條件進行連線起來。
shell所提供的邏輯運算子有邏輯與、邏輯或和邏輯否這三種,以下是對各個邏輯運算子的簡單介紹。
-a:邏輯與,僅當兩邊的條件都為真時,結果才為真,否則為假。
-o:邏輯或,只要其中一邊的條件為真,結果就為真。
!:邏輯否,當條件為假時,結果為真。
接著演示如何使用這些邏輯關係運算子進行檔案屬性的測試。其實,進行檔案屬性的比較測試的操作與之前的操作差不多。首先使用編輯器建立名為 test4.sh 的檔案,然後寫入需要測試的字串,之後儲存所做修改並退出。
01 #!/bin/bash02 #03 [-x helloscript.sh-a-x test2.sh ]04 echo $?05 echo06 [-x helloscript.sh-o-x test2.sh ]07 echo $?
說明:
第03行,當兩個檔案都有可執行權時為真
第06行:當其中有一個檔案有可執行權時為真
完成之後,將內容進行儲存並退出,之後執行test4.sh檔案。
[scat@Scat ~]$ bash test4.sh1 # 第一個測試結果為假0 # 第二個測試結果為真
1.指令碼的組成和執行
Linux shell指令碼的結構並不複雜,其主要由變數、內部命令以及shell的語法結構和一些函式、其他命令列的程式等組成,以下是一個簡單的shell指令碼。
#!/bin/bash #This is a first scriptechoecho Hello Bash Script!echo
一般使用字尾名“.sh”來表示shell指令碼,此指令碼中的第一行使用“#!”開頭,表明要用/bin/bash來解釋和執行這個指令碼檔案,也可以使用/bin/sh來代替。實際上,/bin/sh是一個指向/bin/bash的軟連結(soft link),也就是說,在執行/bin/sh 時,它呼叫的命令與/bin/bash 是相同的。可以使用如下的命令來檢視/bin/bash檔案。
autotest@xa-stf-u1804:~/Documents$ ll -la /bin/bash-rwxr-xr-x 1 root root 1113504 Apr 4 2018 /bin/bash*
接著是關於這個指令碼的一些描述資訊,這些描述資訊包括編寫指令碼的時間、人物以及指令碼的功能等資訊,這也許是為了方便後來對指令碼的維護。
之後是指令碼所要實現的功能,這是指令碼最為主要的部分,也是編寫指令碼的目的。當指令碼編寫完成之後儲存指令碼並退出,執行指令碼可以事先使用chmod命令為該指令碼檔案新增可執行權,然後再執行,或者接著使用bash後接指令碼檔名執行。
[scat@Scat ~]$ chmod u+x helloscript.sh # 新增可執行權 [scat@Scat ~]$ ./helloscript.sh# 執行指令碼檔案 Hello Bash Script![scat@Scat ~]$ bash helloscript.sh# 使用bash 來執行 Hello Bash Shell Script!
在一個剛建立的指令碼檔案中,是沒有可執行許可權的。因此在執行它時會出現不允許執行的提示。而在新增可執行許可權之後就可以執行。
2.指令碼執行過程的追蹤
對於一個剛完成編寫的程式碼程式,無論技術有多麼熟練都難免出現錯誤,所出現的這些錯誤包括語法錯誤和邏輯錯誤。若是遇到語法錯誤還好,要是邏輯錯誤那就麻煩了。這是因為有邏輯錯誤的程式可以正常執行,但所執行的結果並非想要的。
對於所編寫的指令碼,可以使用set命令進行執行時的跟蹤。利用set命令有助於完成程式碼、發現程式碼中的錯誤以及修改和整理程式碼,使得所編寫的程式碼更為完整。看如下一個名為test.sh的指令碼。
#!ban/bash # #set -xecho -n "are you a student?"read answerif [ $answer = Y ]then echo "yes,I am a student"else echo "No,I am a teacher"fi
完成指令碼的編寫之後,將其儲存並退出。接著進行授權,然後執行指令碼檔案。或者使用bash直接執行,操作如下。
[scat@Scat ~]$ bash test.sh # 執行指令碼檔案 are you a student?Y # 輸入Y確認,需要大寫 yes,I am a student [scat@Scat ~]$ bash test.share you a student?N # 此次輸入N No,I am a teacher
以上只是一些簡單的輸出,沒有任何其他引數的輸出。接著使用set命令來實現對指令碼的跟蹤。
首先開啟set的功能,即將set命令前面的#號去掉,之後儲存所做修改並退出,然後執行bash命令。
[scat@Scat ~]$ bash test.sh # 執行test.sh檔案+echo-n 'are you a student?'are you a student?+read answer Y # 輸入Y,要大寫+'[' Y = Y ']'yes,I am a student [scat@Scat ~]$ bash test.sh # 再次執行指令碼檔案+echo-n 'are you a student?'are you a student?+read answer N # 此次輸入N+'[' N = Y ']'+echo 'No,I am a teacher'No,I am a teacher
在啟動set命令功能之後,當執行指令碼檔案時出現了一些以“+”開頭的行。也就是說,使用set命令可對指令碼進行完全的跟蹤。可以透過跟蹤來發現理想的輸出與實際輸出的區別,然後進行修改,最終達到所需的要求。 3.指令碼中的條件測試 下面介紹指令碼中的條件測試。這方面的內容涉及數值的測試、字串以及數字等內容。 (1)數值測試 對數值進行測試,其主要是對兩個數值進行比較,比較的結果包括兩個數值相等、不相等以及大於和小於等,表中列出了常用的數值關係運算子。 [object Object]
下面演示如何使用這些關係運算子進行數值的測試。其實,進行數值比較的測試非常簡單。首先使用編輯器vi建立名為test1.sh的檔案,然後寫入需要測試的數值,儲存之後退出。
#!ban/bash #
[ 36 -eq 36 ] # 判斷36是否等於36echo $?echo # 使用echo命令輸出一個空格[ 36 -eq 35 ] # 判斷36是否等於35echo $?echo[ 36 -gt 30 ] # 判斷36是否大於30echo $?
以上的每條判斷語句都可以單獨來寫,這裡為了方便而將它們寫在一起進行測試。完成以上的操作之後,接著開始執行指令碼檔案。注意,輸出0表示正確,也就是說,條件成立,而1則相反,執行檔案及測試結果如下所示。
[scat@Scat ~]$ bash test1.sh0 # 第一個輸出為0,說明條件成立1 # 第二個輸出為1,說明條件不成立0 # 輸出0,說明條件成立
(2)字串測試
對於字串的測試,可以對單個字串進行,也可以對多個字串進行。可透過對兩個字串的值進行比較來測試字串是否相等。表15-2列出了進行字串測試時常用的關係運算子。
接著演示如何使用這些關係運算子進行字串的測試。其實,進行字串比較的測試非常簡單。首先建立名為test2.sh的指令碼檔案,其內容如下。
01 #!/bin/bash02 [ "ccc" = "ccb" ]# 使用"="來判斷這兩個字串是否相等,不用雙引號也行03 echo $?04 echo05 [ "ccc" != "ccb" ] # 判斷字串是否不相等06 echo $?07 echo08 test2="abc"# 定義test2 的值為abc09 [-z $test2 ]# 判斷test2 是否為空10 echo $?11 exit 0
完成以上的寫入並進行儲存之後,接著開始執行指令碼檔案。執行檔案及測試結果如下所示。
1 # 輸出1,表示第一個測試結果的成立0 # 輸出0,表示測試結果成立1
(3)邏輯運算子
在完成以上指令碼檔案的建立之後,到目前為止已經存在4個指令碼檔案。在這4個指令碼檔案中,只有一個檔案擁有可執行權,下面使用ll命令列出這些指令碼檔案。
[scat@Scat ~]$ ll total 16-rwxrw-r-- 1 scat scat 76 Nov 6 14:05 helloscript.sh-rw-rw-r-- 1 scat scat 77 Nov 6 19:13 test1.sh-rw-rw-r-- 1 scat scat 91 Nov 6 19:23 test2.sh-rw-rw-r-- 1 scat scat 159 Nov 6 15:17 test.sh
對於這些檔案,若需要對其型別、許可權以及長度等進行檢測時,可使用檔案狀態檢測運算子(如表15-3所示)來測試,如下是一個簡單的例子。
01 [-x helloscript.sh ] # 判斷helloscript.sh是否有可執行權02 echo $?03 echo04 [-x test1.sh # 判斷test1.sh是否有可執行權05 echo $?
完成之後,將內容進行儲存並退出,之後執行test3.sh檔案。
0 # 輸出0,表示helloscript.sh檔案擁有可執行權1 # 輸出1,表示test1.sh沒有可執行權
本節的重點是針對多個條件進行測試。要對多個條件進行測試,需要使用一些邏輯運算子,透過邏輯運算子將這些需要進行測試的條件進行連線起來。
shell所提供的邏輯運算子有邏輯與、邏輯或和邏輯否這三種,以下是對各個邏輯運算子的簡單介紹。
-a:邏輯與,僅當兩邊的條件都為真時,結果才為真,否則為假。
-o:邏輯或,只要其中一邊的條件為真,結果就為真。
!:邏輯否,當條件為假時,結果為真。
接著演示如何使用這些邏輯關係運算子進行檔案屬性的測試。其實,進行檔案屬性的比較測試的操作與之前的操作差不多。首先使用編輯器建立名為 test4.sh 的檔案,然後寫入需要測試的字串,之後儲存所做修改並退出。
01 #!/bin/bash02 #03 [-x helloscript.sh-a-x test2.sh ]04 echo $?05 echo06 [-x helloscript.sh-o-x test2.sh ]07 echo $?
說明:
第03行,當兩個檔案都有可執行權時為真
第06行:當其中有一個檔案有可執行權時為真
完成之後,將內容進行儲存並退出,之後執行test4.sh檔案。
[scat@Scat ~]$ bash test4.sh1 # 第一個測試結果為假0 # 第二個測試結果為真
原文出處:https://www.cnblogs.com/xixiuling/p/10330646.html
作者:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2820869/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell指令碼程式設計學習筆記-運算子指令碼程式設計筆記
- shell指令碼程式設計學習筆記——變數指令碼程式設計筆記變數
- Linux Shell指令碼程式設計-基礎1Linux指令碼程式設計
- 前端學習 linux —— shell 程式設計前端Linux程式設計
- Linux Shell指令碼程式設計while語句案例Linux指令碼程式設計While
- Linux命令和shell指令碼學習Linux指令碼
- 如何學習shell程式設計?Linux運維學習shell程式設計是什麼程式設計Linux運維
- Shell 指令碼程式設計陷阱指令碼程式設計
- Linux學習之路(三)Shell指令碼初探Linux指令碼
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- shell指令碼程式設計筆記指令碼程式設計筆記
- 7.shell指令碼程式設計指令碼程式設計
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計
- linux學習day3——shell指令碼上Linux指令碼
- linux學習day4——shell指令碼中Linux指令碼
- 什麼是shell指令碼?Linux為什麼學習shell?指令碼Linux
- Linux命令列與shell指令碼程式設計入門經驗Linux命令列指令碼程式設計
- Linux_day06_01_Shell指令碼程式設計_Bash基礎Linux指令碼程式設計
- Shell程式設計-01-Shell指令碼初步入門程式設計指令碼
- 【Linux學習筆記29】shell指令碼基礎Linux筆記指令碼
- shell高效程式設計:shell指令碼從未如此美麗程式設計指令碼
- Linux Shell指令碼Linux指令碼
- 《Linux命令列與shell指令碼程式設計大全 第3版》Linux命令列---46Linux命令列指令碼程式設計
- 好程式設計師Linux雲端計算教程分享Shell指令碼面試題程式設計師Linux指令碼面試題
- Shell指令碼執行有哪些方式?linux系統學習指令碼Linux
- shell指令碼學習筆記-1指令碼筆記
- 【網路安全】Shell 指令碼學習指令碼
- shell和bash指令碼命令學習指令碼
- Shell指令碼程式設計規範與變數(shell指令碼必須要知道的規矩!)指令碼程式設計變數
- 史上最全shell指令碼程式設計語法上冊指令碼程式設計
- shell指令碼程式設計之選擇控制結構指令碼程式設計
- Linux之shell程式設計Linux程式設計
- Linux Shell程式設計(1)Linux程式設計
- Linux Shell程式設計(2)Linux程式設計
- 雲端計算學習路線教程程式碼筆記:Shell程式設計筆記程式設計
- linux常用的shell指令碼Linux指令碼
- Linux學習之Shell指令碼語言的優勢是什麼?Linux指令碼
- 為什麼Linux運維工程師必須學習Shell程式設計?Linux運維工程師程式設計