第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Shell echo/printf 命令

1. Shell 顯示命令

1.1 Shell 顯示命令

與其他語言一樣,Shell 也有字符串的輸出及格式化字符的需求,在本章節(jié)我們著重講解 Shell 中的 echo 與 printf 命令,靈活運(yùn)用這兩個(gè)命令,基本上就能滿足我們在 Shell 編寫中的大多數(shù)顯示輸出及格式化字符串的需求。

1.2 為什么要用顯示命令

在我們編寫 Shell 腳本的時(shí)候需要為用戶提供信息提示以及交互式顯示,也存在需要記錄腳本的執(zhí)行日志等,此時(shí)都需要我們來根據(jù)不同的場景,利用 Shell 的顯示命令也稱輸出命令來滿足我們的需求。

2. Shell 顯示 echo 命令操作

我們明確了 Shell 顯示命令的含義及作用,首選讓我們來看 echo 命令及基本操作。

2.1 echo 語法

echo 命令語法非常簡單:echo [option] [arguments],其中根據(jù) option 的不同,賦予了 echo 很多強(qiáng)大的功能。

2.2 echo 常用操作

2.2.1 打印普通字符串

通常默認(rèn)不帶參數(shù)就是處理打印普通字符串,例如:

[root@master ~]# echo "hello shell"
hello shell

2.2.2 不換行輸出

默認(rèn) echo 輸出普通字符串為自動(dòng)換行的,如果不想輸出自動(dòng)換行,可以添加選項(xiàng) -n,例如:

[root@master ~]# echo -n "hello shell"
hello shell[root@master ~]# 

我們可以看到此時(shí)輸出就不自動(dòng)換行,該需求可以在我們寫文件的時(shí)候使用。

2.2.3 輸出變量

在我們前面講解變量的時(shí)候,有提到過在引用變量的時(shí)候可以利用 echo 命令,但是此時(shí)需要我們注意單引號(hào)與雙引號(hào)的區(qū)別。

  • 單引號(hào)

單引號(hào)為將變量名原樣輸出,不引用其的值,例如:

[root@master ~]# STR1="hello shell"
[root@master ~]# echo '${STR1}'
${STR1}
  • 雙引號(hào)

雙引號(hào)為引用變量的值進(jìn)行輸出,例如:

[root@master ~]# echo "${STR1}"
hello shell
[root@master ~]# echo ${STR1}
hello shell

我們可以發(fā)現(xiàn)在終端如果不顯式書寫引號(hào),默認(rèn)就為雙引號(hào),也就是引用我們變量的值,但是我們在編寫 Shell 腳本的時(shí)候盡可能地顯示寫上引號(hào),這樣可以避免不必要的異常發(fā)生。

2.2.4 -e 轉(zhuǎn)義

echo 命令使用 -e 選項(xiàng)可以開啟轉(zhuǎn)義,處理特殊字符。

  • \n: 換行符號(hào)
[root@master ~]# echo -e "hello\nshell" 
hello
shell
  • \t: 制表符,也就是按我們的 tab 鍵
[root@master ~]# echo -e "hello\tshell" 
hello   shell
  • \r: 回車鍵,RETURN
[root@master ~]# echo -e "hello\r"    
hello		
  • \a: 從系統(tǒng)喇叭送出鈴聲,ALERT
	[root@master ~]# echo -e "\a"
  • \\:顯示反斜線本身
[root@master ~]# echo -e "hello \\ shell"
hello \ shell
  • \f:FORMFEED,換頁字符
[root@master ~]# echo -e "hello\fshell" 
hello
     shell
  • \E:ESCAPE,跳脫鍵
[root@master ~]# echo -e "hello \Eshell"
hello hell

2.2.5 文件操作

  • 創(chuàng)建文件

可以利用 echo 命令來創(chuàng)建文件,例如:

[root@master ~]# ls test.sh
ls: cannot access test.sh: No such file or directory
[root@master ~]# echo "hello shell" >test.sh
[root@master ~]# cat test.sh 
hello shell
[root@master ~]#

如果需要在一個(gè)文件中寫入簡單內(nèi)容,不用創(chuàng)建文件然后打開,可以直接利用 echo 命令將內(nèi)容輸入到文件中,文件會(huì)自動(dòng)創(chuàng)建。

  • 清空文件

可以利用 echo 來清空文件內(nèi)容,例如:

[root@master ~]# cat test.sh 
hello shell
[root@master ~]# echo >test.sh 
[root@master ~]# cat test.sh 

2.2.6 感嘆號(hào)

在 echo 中,如果使用雙引號(hào)其中帶有 ! 則會(huì)拋出異常,這是因?yàn)槟J(rèn) Shell 開啟了感嘆號(hào)引用內(nèi)存中的歷史命令,可以利用 set +H 進(jìn)行關(guān)閉,如果不關(guān)閉該設(shè)置還想使用感嘆號(hào),可以使用單引號(hào)。

[root@master ~]# echo "hello !"
-bash: !": event not found
[root@master ~]# echo 'hello !'
hello !

2.2.7 顏色輸出

在 Shell 中我們有時(shí)候需要與用戶進(jìn)行交互式操作,如果輸出的內(nèi)容有顏色,對于用戶識(shí)別更為明顯。Shell 中 echo 可以對字體顏色 / 背景 / 顯示方式進(jìn)行控制,如下表:

字體顏色 字體背景顏色 顯示方式
30:黑 40:黑
31:紅 41:深紅 0:終端默認(rèn)設(shè)置
32:綠 42:綠 1:高亮顯示
33:黃 43:黃色 4:下劃線
34:藍(lán)色 44:藍(lán)色 5:閃爍
35:紫色 45:紫色 7:反白顯示
36:深綠 46:深綠 8:隱藏
37:白色 47:白色
格式:
\033[1;31;40m # 1 是顯示方式,可選。31 是字體顏色。40m 是字體背景顏色。
\033[0m # 恢復(fù)終端默認(rèn)顏色,即取消顏色設(shè)置。
  • 顯示方式
for i in {1..8};do echo -e "\033[$i;31;40m hello shell \033[0m";done
  • 字體顏色
for i in {30..37};do echo -e "\033[$i;40m hello shell \033[0m";done
  • 背景顏色
for i in {40..47};do echo -e "\033[47;${i}m hello shell \033[0m";done

3. Shell 中 printf 命令操作

我們學(xué)習(xí)了 echo 命令,它通常用于處理常規(guī)的需求,還有一些更高級(jí)的需求,例如我們希望輸出內(nèi)容指定字符的寬度,左右對齊,格式小數(shù)輸出等,此場景下需要利用 printf 命令進(jìn)行處理。

3.1 printf 語法

printf 功能為格式化打印數(shù)據(jù),語法為:printf format-string [arguments]。

  • format-string: 為格式控制字符串;
  • arguments: 為參數(shù)列表。

3.2 printf 注意點(diǎn)

其引用 C 語言中的 printf 命令,但 也有一些區(qū)別,需要注意:

  • printf 默認(rèn)情況下末尾不加換行符號(hào),所以如果需要換行,需要顯示手動(dòng)添加 \n;
  • printf 為格式化輸出不對內(nèi)容做改變操作,尤其在浮點(diǎn)數(shù)輸出的時(shí)候,對其結(jié)果不進(jìn)行改變,這是現(xiàn)實(shí)結(jié)果有差異;
  • 在 printf 中 arguments 為參數(shù)列表,例如字符串或者變量,建議個(gè)數(shù)與 format-string 要求的數(shù)量相同;
  • printf 不用加括號(hào),arguments 使用空格分隔,不用逗號(hào)。

3.3 printf 常用操作

3.3.1 打印普通字符串

[root@master ~]# printf "hello shell"
hello shell[root@master ~]# printf "hello shell\n"
hello shell

如果需要換行,需要手動(dòng)顯式添加 \n。

3.3.2 格式字符串

在掌握 printf 前需要先了解 format-string,其對應(yīng)著不同的含義,在此我們介紹最常用的格式字符串。

  • %s

字符串格式化,其中 %s 就是引用后面的字符 shell

[root@master ~]# printf "hello %s\n" shell
hello shell
  • %d

十進(jìn)制整數(shù)

[root@master ~]# printf "age: %d\n" 20      
age: 20
  • 左對齊

printf 可以使得左對齊,例如 %-10s 指一個(gè)寬度為 10 個(gè)字符,左對齊利用 - 表示,任何字符都會(huì)被顯示在 10 個(gè)字符寬的字符內(nèi),如果不足則自動(dòng)以空格填充,超過也會(huì)將內(nèi)容全部顯示出來。

[root@master ~]# printf "hello %-10s%s\n" shell 。      
hello shell     。
  • 右邊對齊

右對齊利用 + 表示,%+10.2f 指格式化為小數(shù),其中 10 表示 4 個(gè)字符寬度,.2 指保留 2 位小數(shù)。

[root@master ~]# printf "hello %+10s%s\n" shell 。 
hello      shell。

[root@master ~]# printf "hello %+10.2f %s\n" 3.1415 。	
hello      +3.14
  • 其他

當(dāng)然一些其他格式化字符,在此舉例最常用的,其他的可參考如下:

%c ASCII字符.顯示相對應(yīng)參數(shù)的第一個(gè)字符
%d,%i 十進(jìn)制整數(shù)(常用)
%e 浮點(diǎn)格式([-d].precisione [+-dd])
%E 浮點(diǎn)格式([-d].precisionE [+-dd])
%g %e%f轉(zhuǎn)換,看哪一個(gè)較短,則刪除結(jié)尾的零
%G %E或%f轉(zhuǎn)換,看哪一個(gè)較短,則刪除結(jié)尾的零
%s 字符串(常用)
%u 不帶正負(fù)號(hào)的十進(jìn)制值
%x 不帶正負(fù)號(hào)的十六進(jìn)制.使用af表示1015
%% 字面意義的%
%X 不帶正負(fù)號(hào)的十六進(jìn)制.使用A至F表示1015

3.3.3 其他

  • 單雙引號(hào)

在 printf 中,單雙引號(hào)都一致。

[root@master ~]# printf "hello %s\n" shell
hello shell
[root@master ~]# printf 'hello %s\n' shell 
hello shell
  • 格式只指定了一個(gè)參數(shù),但多出的參數(shù)仍然會(huì)按照該格式輸出,format-string 被重用進(jìn)行多行輸出
[root@master ~]# printf 'hello %s\n' shell python go
hello shell
hello python
hello go

[root@master ~]# printf "%s %s %s %s\n" a b c d e f g h i j
a b c d
e f g h
i j  
  • 如果沒有 arguments,那么則對應(yīng)使用默認(rèn)值表示, % s 用 NULL 代替,% d 用 0 代替
[root@master ~]# printf "%s default  %d \n" 
 default  0 

3.3.4 printf 轉(zhuǎn)義

printf 的轉(zhuǎn)義與 echo 中的一致,可參考 echo 中的轉(zhuǎn)義。

4. 實(shí)例

4.1 需求

例如給出如下 nginx 的訪問日志,需要對其進(jìn)行分析并且輸出不同的狀態(tài)碼,利用顏色不同進(jìn)行區(qū)分不同的狀態(tài)碼。

112.65.61.117 - - [05/Nov/2019:17:10:54 +0800] "GET /js/chunk-2eca3a5a.2f1d5ea3.js HTTP/1.1" 200 5276 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:54 +0800] "GET /js/chunk-91d36e6e.a1444c20.js HTTP/1.1" 200 12674 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:54 +0800] "GET /js/chunk-vendors.3a6c246c.js HTTP/1.1" 404	 260490 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) Apessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:54 +0800] "GET /js/app.ec4e6290.js HTTP/1.1" 200 11149 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-vendors.3a6c246c.js HTTP/1.1" 200 260482 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /api/2 HTTP/1.1" 500 502 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-2eca3a5a.2f1d5ea3.js HTTP/1.1" 200 5276 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /css/chunk-91d36e6e.a5cb4df4.css HTTP/1.1" 200 1133 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-03341f87.78501520.js HTTP/1.1" 200 1059 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-91d36e6e.a1444c20.js HTTP/1.1" 200 12674 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:56 +0800] "GET /api/1 HTTP/1.1" 500 39193 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:56 +0800] "GET /img/download.f4b65200.png HTTP/1.1" 200 7737 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:57 +0800] "GET /img/background.fc2d80f1.png HTTP/1.1" 200 57711 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:57 +0800] "GET /img/peitu.a89ef99f.svg HTTP/1.1" 301 106569 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:57 +0800] "GET /fonts/element-icons.535877f5.woff HTTP/1.1" 200 28200 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
112.65.61.117 - - [05/Nov/2019:17:10:59 +0800] "GET /img/download.f4b65200.png HTTP/1.1" 200 7737 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:59 +0800] "GET /img/scan.d3d981fc.png HTTP/1.1" 404 39193 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:59 +0800] "GET /img/background.fc2d80f1.png HTTP/1.1" 200 57711 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:11:00 +0800] "GET /img/peitu.a89ef99f.svg HTTP/1.1" 200 106569 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
14.106.162.188 - - [05/Nov/2019:17:14:40 +0800] "GET /index HTTP/1.1" 200 535 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/4G Language/zh_CN" "-"
14.106.162.188 - - [05/Nov/2019:17:14:40 +0800] "GET /css/app.7d918353.css HTTP/1.1" 200 1290 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/4G Language/zh_CN" "-"
14.106.162.188 - - [05/Nov/2019:17:14:40 +0800] "GET /js/app.ec4e6290.js HTTP/1.1" 404 11149 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/4G Language/zh_CN" "-"

4.2 思路

可以利用上節(jié)課的數(shù)組進(jìn)行狀態(tài)存儲(chǔ),之后利用統(tǒng)計(jì)每個(gè)狀態(tài)的數(shù)量來利用 echo 顏色進(jìn)行區(qū)分顯示。

4.3 實(shí)現(xiàn)

  • 將 nginx 訪問日志文件存儲(chǔ)為 nginx.log,可以利用 cat 命令來創(chuàng)建文件
cat > nginx.log <<EOF
112.65.61.117 - - [05/Nov/2019:17:10:54 +0800] "GET /js/chunk-2eca3a5a.2f1d5ea3.js HTTP/1.1" 200 5276 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
...
EOF
  • 編寫代碼,其中為們利用 cut 對 nginx 日志文件進(jìn)行分割,狀態(tài)碼的列尾第九列
#!/bin/bash
# Description: nginx status
# Auth: kaliarch
# Email: kaliarch@163.com
# function: nginx status check
# Date: 2020-03-21 14:00
# Version: 1.0

# 對輸入的nginx日志文件進(jìn)行判斷
NGINX_LOG=$1

# 定義管理數(shù)組
declare -A HTTP_STATUS

# 對數(shù)組進(jìn)行內(nèi)容賦值

# 利用netstat命令來過濾出關(guān)系的一列數(shù)據(jù)
for status in $(cat ${NGINX_LOG} |cut -d" " -f9)
do
        # 對狀態(tài)相同狀態(tài)的HTTP進(jìn)行數(shù)值累加
        let HTTP_STATUS[${status}]++
done

# 將統(tǒng)計(jì)完成的TCP鏈接狀態(tài)及數(shù)據(jù)記錄到日志中
for i in ${!HTTP_STATUS[@]}
do 
        if [ ${i} -eq 404 ];then
                echo -e "\033[34;40m文件${NGINX_LOG}中狀態(tài)碼為${i}的數(shù)量為${HTTP_STATUS[${i}]} \033[0m"
        elif [ ${i} -eq 500 ];then
                echo -e "\033[31;40m文件${NGINX_LOG}中狀態(tài)碼為${i}的數(shù)量為${HTTP_STATUS[${i}]} \033[0m"
        elif [ ${i} -eq 200 ];then
                echo -e "\033[32;40m文件${NGINX_LOG}中狀態(tài)碼為${i}的數(shù)量為${HTTP_STATUS[${i}]} \033[0m"
        else
                echo -e "\033[36;40m文件${NGINX_LOG}中狀態(tài)碼為${i}的數(shù)量為${HTTP_STATUS[${i}]} \033[0m"
        fi
done
  • 執(zhí)行結(jié)果
[root@master shell_echo]# bash nginx_status.sh nginx.log 
文件nginx.log中狀態(tài)碼為200的數(shù)量為17 
文件nginx.log中狀態(tài)碼為301的數(shù)量為1 
文件nginx.log中狀態(tài)碼為404的數(shù)量為2 
文件nginx.log中狀態(tài)碼為500的數(shù)量為2 

5. 注意事項(xiàng)

  • 在 echo 變量引用時(shí),我們推薦勤用引號(hào),單引號(hào)為原樣輸出字符串,雙引號(hào)為輸出變量的值;
  • printf 由 POSIX 標(biāo)準(zhǔn)所定義,因此使用 printf 的腳本比使用 echo 移植更好,如果后期考慮平臺(tái)移植問題,建議使用 printf。

6. 小結(jié)

在 shell 中我們可以利用 echo 來記錄程序的日志,或?qū)ξ募M(jìn)行新增內(nèi)容輸入,或利用其進(jìn)行顏色打印,可以輸出帶有顏色的漂亮提示。在設(shè)計(jì)多平臺(tái)移植性問題的時(shí)候,為們可以優(yōu)先考慮 printf,對于數(shù)組顯可以使用 printf 來完成,靈活運(yùn)用顯示使得腳本編寫更為方便靈活。