shell腳本編程是linux運維工程師必備的技能,也是非常重要的一個技能,所以把shell編程學好,只有好處。基礎語法我也就不講了,學過C語言這些語言的,稍微看一下就能明白shell編程的基礎,所以我們直接切入正題。
開班第20天:
今天的課程大綱:
-
shell編程中的函數
-
編寫一個自動掛載的腳本
-
利用autofs怎么實現自動掛載
-
文件鎖和信號捕獲trap
-
sed流文件編輯器
詳細講解:
-
shell編程中的函數
shell中,我們定義函數的方法有兩種:
下面調用的時候,直接調用函數名就可以了
這里需要注意的就是shell中函數的返回值,它跟其他編程語言不一樣,它的返回值return是返回函數的退出狀態碼。執行成功為0,不成功為非0.
-
編寫一個自動掛載的腳本
編寫服務腳本,一般的步驟是:
1.有執行權限(chmod +x /....)
2.支持start,stop...
3.開機啟動
接下在我們編寫一個自動掛載的服務腳本,跟據上面所說的步驟,
1.我們可以先寫出真個腳本的主體:3.4行是代表我這個服務腳本可以開機啟動,5行代表我要使用/etc/init.d/functions這個函數庫,下面的success和failure都是來自這個函數庫的。
2.編寫start()函數,mountpoint是檢測/boss這個文件夾是否為一個掛載點,如果是掛在點,那么我啟動就失敗,也就是本身已經在掛載,如果不是掛載點,那么我正常啟動,然后掛載ip文件。stop函數跟start函數類似。
3.編寫status()函數
4.測試啟動,把編寫的腳本移動到/etc/init.d/明明為bossnfs
-
利用autofs怎么實現自動掛載
這里的自動掛載,跟我們之前學的添加到/etc/fstab不一樣,他是當你訪問某一個目錄的時候,我們的共享就會掛在這個訪問的目錄,即使這個目錄是不存在的。這里我們可以使用autofs來實現自動掛載,安裝起服務,yum install autofs,service autofs restart。這里有兩個需求,第一是訪問/mnt/boss這個目錄的時候,自動掛載172.16.65.128:/share到這個boss目錄。第二個是訪問/boss目錄的時候,自動自動掛載172.16.65.128:/share到這個boss目錄。
需求1.修改配置文件,vim /etc/auto.master,添加/mnt這個目錄
編寫/etc/auto.mnt這個文件:
需求2:修改配置文件,vim /etc/auto.master,添加/boss到這個目錄,這里需要注意的,根目錄要用/-表示
編寫/etc/auto.root文件:這里需要注意的是boss這個目錄是在根目錄下的,所以要用絕對路徑。
測試:成功掛載
-
文件鎖和信號捕獲trap
1.什么是文件鎖,文件鎖就是我們在運行一個服務的時候,另一個終端是不能同時運行的,這就是文件鎖的功能,那么我們寫一個簡單的腳本測試一下文件鎖的功能:
測試,我在一個終端運行的時候,另一個終端也開始運行這個腳本,但是錯誤了,提示:
2.信號捕獲,我們在上面的腳本執行的時候,按下ctrl+c,運行終止,但是鎖文件沒有被刪除,一直存在,所以下次運行這個腳本的時候,是無法運行的,除非我們手動刪除這個鎖文件,所以我們要捕獲ctrl+c這個信號,然后通過捕獲這個信號之后,執行某一定的操作,使得我們的鎖文件不至於一直存在。
需求1:使得上述服務腳本在執行的過程中,不能按ctrl+c,我把腳本的最后改成下面:代表我trap了2信號,""里面什么也沒有,表示捕獲信號之后什么也不做,在刪除了$FLOCK鎖文件之后,我們再釋放2信號。
需求2:我們在腳本運行過程中允許按ctrl+c,但是按了之后,這個腳本必須自動刪除鎖文件,那么下次運行的時候就不會提示鎖文件存在,無法運行,這里我們只需要修改掉捕獲信號2之后,刪除鎖文件然后退出即可。
-
sed流文件編輯器
sed稱為流文件編輯器或者非交互編輯器,sed適合在腳本中編輯文件,因為vim無法在腳本中使用。sed主要的用法有增刪改查,這個大家可以看一下man手冊,還有就是多多練習。明天我會提供一個sed的文件,把sed基本上所有的用法都會概括一下。希望大家關注一下!
總結:
今天主要講了在shell腳本編程中我們以后會經常接觸的,服務腳本的編寫,其實學這個懂得編寫一個,其他的都是畫餅,另外還講解了sed流文件編輯器,因為在腳本中,我們無法使用vim來進行對配置文件修改的。
轉自:
《第20天》shell編程之服務腳本編寫,文件鎖以及信號捕獲 - 今日頭條(TouTiao.com)
http://toutiao.com/a6321640633670009090/