天天看點

linux shell指令行及腳本程式設計執行個體詳解_linux之shell程式設計(一)

大家,周末晚上好,今天來分享linux裡面的shell程式設計(一種腳本程式設計),哦不,正确的說,你或許應該早就了解過腳本程式設計,比如說很火的python。嗯,不扯别了,趁着周末多給大家更文,之前有過半個月沒更文,真對不住各位了,還有以前的文章排版也是一塌糊塗,不過慶幸的是,現在比較稍微好多了,也離不開各位網友給的意見。下面就開始詳細介紹shell了:

一、shell介紹:

 1、shell 它英文翻譯的話就是“殼”的意思,但是在我們linux環境下,它确實是發揮了很大的作用,因為在linux環境下,shell 可以了解為軟體系統提供給使用者操作的指令行界面,可以說它是人機互動的一種方式(也可以說是計算機硬體與使用者的翻譯官),我們玩嵌入式的,裝ubuntu比較多(其它linux發行版本也是一樣的操作),你打開要輸入指令來實作自己的需求,第一時間肯定就是打開“終端”,這個終端就是shell 了啦!它是作為使用者與Linux系統内部的通信媒介,除了能夠支援各種變量與參數外,還提供了諸如循環、分支等進階程式設計語言才有的控制結構特性,這個後面會慢慢分享。

2、但是我們在這個終端下輸入指令來建立單個工程的話,是沒用啥問題,但是一旦工程數量多了,再去一個一個輸入的話,就拉低效率了,比如說:譬如我們要在linux下建立一個檔案a.c,可以touch a.c 但是如果我現在是用在linux下建立100個檔案,分别為a1.c  a2.c.....a100.c 如果這時候還是手工去指令行下執行指令建立也可以,但是很累。最好的做法就是把建立過程寫成一個shell腳本程式,然後去執行這個shell腳本程式,執行這個程式的效果和手工在指令行輸入那些指令效果一樣的。從這裡我們可以總結出來,shell有兩種工作方式:

  • 互動式(Interactive):使用者每輸入一條指令就立即執行。
  • 批處理(Batch):由使用者事先編寫好一個完整的Shell腳本,Shell會一次性執行腳本中諸多的指令。

二、shell腳本的運作機制:解釋運作

1、我們做嵌入式的,對C語言和C++比較熟悉,而這兩種語言編寫過程是這樣的:編寫出源代碼(源代碼是不能直接運作的)然後編譯連結形成可執行二進制程式,然後才能運作;而腳本程式不同,腳本程式編寫好後源代碼即可直接運作(沒有編譯連結過程)

2、shell程式是解釋運作的,所謂解釋運作就是說當我們執行一個shell程式時,shell解析器會逐行的解釋shell程式代碼,然後一行一行的去運作。(順序結構)

3、CPU實際隻認識二進制代碼,根本不認識源代碼。腳本程式源代碼其實也不是二進制代碼,CPU也不認識,也不能直接執行。隻不過腳本程式的編譯連結過程不是以腳本程式源代碼為機關進行的,而是在腳本運作過程中逐行的解釋執行時才去完成腳本程式源代碼轉成二進制的過程(不一定是編譯連結,因為這行腳本程式可能早就編譯連接配接好了,這裡我們隻是調用它)的。

三、實戰一個簡單shell腳本程式:

1、編輯器、編譯器、運作方法(腳本的3種執行方法):

  • 編輯器:shell程式是文本格式的,隻要是文本編輯器都可以。但是因為我們的shell是要在linux系統下運作的,是以換行符必須是'\n',而windows下的換行符是"\r\n",是以windows中的編輯器寫的shell不能在linux下運作。是以我們整個課程都是在linux下使用vi編輯器(實際上是vim,這個比較好用一點)進行編寫調試的。
  • 編譯器 :不涉及,因為shell是解釋性語言,直接編輯完就可以運作。
  • shell程式運作的運作有多種方法,這裡介紹三種方法:

    第一種:./xx.sh,和運作二進制可執行程式方法一樣。這樣運作shell要求shell程式必須具有可執行權限。chmod a+x xx.sh來添加可執行權限。

    第二種:source xx.sh,source是linux的一個指令,這個指令就是用來執行腳本程式的。這樣運作不需要腳本具有可執行權限。

    第三種:bash xx.sh,bash是一個腳本程式解釋器,本質上是一個可執行程式。這樣執行相當于我們執行了bash程式,然後把xx.sh作為argv[1]傳給他運作。

2、let's go 體驗第一個shell程式:

在建立shell腳本程式的時候,注意一下它檔案字尾是以".sh"結尾的哈,不要搞錯了哈。

我們現在來建立一個test.sh的一個腳本程式,具體内容如下:

  • 首先用vim來建立一個test.sh檔案:
  • 然後往裡面寫入内容,這先寫一些簡單的語句,後面下篇文章有循環就複雜一點了:

解釋一下内容的意思:

第一行的腳本聲明(#!)用來告訴系統使用哪種Shell解釋器來執行該腳本(這是我書寫shell腳本的格式);第二行是我執行的指令,這個echo的作用:echo指令用于在終端輸出字元串或變量提取後的值,格式為“echo [字元串 | $變量]”。這裡我執行這個腳本檔案的話,就會輸出"hello world" 了。

  • 輸出結果,這裡剛才上面說的那三種都測試一下:

這裡可能執行的時候,沒有權限,可以使用chmod這個指令來修改權限問題。

  • 小結:

    shell就是把以前指令行中鍵入執行的指令寫成了程式。shell其實就是為了避免反複的在指令行下手工輸入而發明的一種把手工輸入步驟記錄下來,然後通過執行shell腳本程式就能再次複述原來記錄的手工輸入過程的一種技術。

    shell編輯完可以直接運作(不需編譯)。

四、總結:

今天的分享隻讓大家簡單的認識一下linux-shell程式設計。這裡有linux指令不熟的小夥伴,可以去學習一下劉遄老師的linux就該這麼學這本書,非常适合入門,通俗易通,網站位址:

https://www.linuxprobe.com/  。

好了,今天的分享就到這裡了,有錯誤可以指出來哦,大家互相學習,取長補短。我是“愛分享、愛學習、愛技術、愛生活”的txp,歡迎來交流,關注公衆号的小夥伴,由于沒有留言功能,為了更好交流,可以加我微信,回複技術,進交流群,一起學習,一起進步。

近期精彩文章推薦:

Linux核心學習(一)之Linux核心源碼目錄

Uboot學習(一)之為啥要有Uboot這玩意

Uboot學習(二)之Uboot能夠實作哪些功能

Uboot學習(三)之Uboot的工作方式

Uboot學習(四)之Uboot指令和ping指令實戰

linux shell指令行及腳本程式設計執行個體詳解_linux之shell程式設計(一)

繼續閱讀