如何寫shell指令碼?嘗試自己編寫乙個簡單指令碼

2021-08-19 16:44:12 字數 2672 閱讀 8940

如何寫shell指令碼?嘗試自己編寫乙個簡單指令碼

shell是什麼?

shell本身是乙個用c語言編寫的程式,它是使用者使用linux的橋梁。

shell既是一種命令語言,又是一種程式語言。作為命令語言,它互動式地解釋和執行使用者輸入的命令;作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。

shell有兩種執行命令的方式:

•互動式(interactive):解釋執行使用者的命令,使用者輸入一條命令,shell就解釋執行一條。

•批處理(batch):使用者事先寫乙個shell指令碼(script),其中有很多條命令,讓shell一次把這些命令執行完,而不必一條一條地敲命令。shell指令碼和程式語言很相似,也有變數和流程控制語句,但shell指令碼是解釋執行的,不需要編譯,shell程式從指令碼中一行一行讀取並執行這些命令,相當於乙個使用者把指令碼中的命令一行一行敲到shell提示符下執行。

shell是一種指令碼語言(即解釋型語言),必須有直譯器來執行這些指令碼。

bash:bash是linux系統預設使用的shell。bash由brian fox和chet ramey共同完成,是bourneagain shell的縮寫,內部命令一共有40個。

ash:ash shell 是由kenneth almquist編寫的,linux中占用系統資源最少的乙個小shell,它只包含24個內部命令,因而使用起來很不方便。

sh:sh 由steve bourne開發,是bourne shell的縮寫,各種unix系統都配有sh。

語法都正確但是執行報錯

設定檔案格式為unix :set fileformat=unix

這裡主要通過實現幾個小功能來間接體會shell的使用:

統計訪問多的ip

為了對nginx日誌檔案裡訪問ip數和響應時間進行分析,需要學習shell指令碼和一些命令的語法。

這裡主要是通過nginx的logs/access.log裡的記錄來分析,因為使用者每一次訪問都會在這裡生成日誌。

我們到達該目錄下,執行cat access.log 可以看到裡面所有日誌

它們按照下面的格式排列

#設定日誌格式,其中upstream_response_time是響應時間,request_time是請求時間

執行 cat access.log | awk '' ,將上面資料第一列顯示,也就是只顯示ip。這條指令等價於awk ''  access.log;

執行awk ''  access.log | sort ,

sort:會將 檔案/文字 的每一行作為乙個單位,相互比較,比較原則是從首字元向後,依次按ascii碼值進行比較,最後將他們按公升序輸出。

注意到上面的引數換成了$nf,它指每一行最後乙個字段,最後乙個欄位是響應時間,這樣就得到了響應時間的公升序排列。(因為我的日誌了ip太少,對ip排序效果不明顯)

我上面只是對大量輸出結果的少量擷取,其實有很多重複的。

執行  awk '' access.log|sort| uniq -c

uniq會對前面的結果去重,加上 -c會在這一列前面顯示它重複的次數,如上圖。

其實我的目的是統計訪問最多的ip,只是因為ip太少這裡用響應時間來充當ip,那麼可以對上面的結果安照重複出現的次數進行公升序排序,awk '' access.log|sort| uniq -c | sort -n

加上 sort 後的 -n 表示按照數值的大小進行排序,如果不加,效果是以下:

可以看出它是從首字元向後,依次按ascii碼值進行比較,最後將他們按公升序輸出。這樣顯然不符合我們的需求。

好,用上awk '' access.log|sort| uniq -c | sort -n ,得到了按照訪問量的公升序排序(假設它是ip)。但是我們希望一降序形式展示這樣可以直觀的看出訪問量最多的那個。那麼在先前的基礎上加上 -r就可以了 。

總結:在sort裡:

# -n是按照數字大小排序,-r是以相反順序,-k是指定需要排序的字段。

所以最終:

awk '' access.log|sort| uniq -c | sort -n -k 1 -r |more

more : 分頁檢視檔案內容。 如果內容不多,可以去掉它。

$0 、$1-$n   的使用

(linux命令大全)

如何寫 如何寫好指令碼?

好的指令碼當然要有好的開場白 好的開題 破題 話題引入,好的敘述與分析 好的結束語。好的指令碼還應有好的輔助說明的素材,700 800字的指令碼,對應的素材數量如下 非真人出鏡者 素材數量需要翻倍,最好找到超過20個素材。寫好指令碼還應注意以幾點 一 開門見山 快速切入主題,這樣的話就更容易讓觀眾對...

架構指令碼如何寫

首先我們看看遊戲主要是由哪幾部分組成的,如下圖所示,任何平台下的任何遊戲核心都是由 資料 邏輯 渲染三大部分組成。當你寫過 2個平台下的遊戲時你會發現其實遊戲開發很 容易 為什麼 容易 呢?因為此時你會發現所有平台下開發遊戲的模式,如下圖中的 資料 與 邏輯 兩部分真的是完全一樣的,這兩部分是與遊戲...

如何寫乙個shell指令碼並執行

linux下你可以有兩種方式執行shell指令碼 1 用shell程式執行指令碼 根據你的shell指令碼的型別,選擇shell程式,常用的有sh,bash,tcsh等 一般來說第一行 bin bash裡面指明了shell型別的,比如 bin bash指明是bash,bin sh則是sh 然後輸入命...