linux下shell常用腳本命令及有關知識
一、需要記住的一些知識點
1、變量類型
運行shell時,會同時存在三種變量:
1) 局部變量
局部變量在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量。
2) 環境變量
所有的程序,包括shell啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。必要的時候shell腳本也可以定義環境變量。
3) shell變量
shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證瞭shell的正常運行
2、shell變量說明
$$
Shell本身的PID(ProcessID)
$!
Shell最後運行的後臺Process的PID
$?
最後運行的命令的結束代碼(返回值)
$-
使用Set命令設定的Flag一覽
$*
所有參數列表。如”$*”用「”」括起來的情況、以”$1 $2 … $n”的形式輸出所有參數。
$@
所有參數列表。如”$@”用「”」括起來的情況、以”$1″ “$2” … “$n” 的形式輸出所有參數。
$#
添加到Shell的參數個數
$0
Shell本身的文件名
$1~$n
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。
3、單引號和雙引號和反引號的區別
以單引號
' '
包圍變量的值時,單引號裡面是什麼就輸出什麼,即使內容中有變量和命令(命令需要反引起來)也會把它們原樣輸出。
以雙引號” “包圍變量的值時,輸出時會先解析裡面的變量和命令,而不是把雙引號中的變量名和命令原樣輸出。以反引號` `(在鍵盤esc下面),命令替換是指Shell可以先執行命令,將輸出結果暫時保存,在適當的地方輸出。可以用指定變量指定
4、shell轉義字符
\\ 反斜杠
\a 警報,響鈴
\b 退格(刪除鍵)
\f 換頁(FF),將當前位置移到下頁開頭
\n 換行
\r 回車
\t 水平制表符(tab鍵)
\v 垂直制表符
5、 算術運算符列表
運算符 說明 舉例
+ 加法 `expr $a + $b` 結果為 30。
– 減法 `expr $a – $b` 結果為 10。
\* 乘法 `expr $a \* $b` 結果為 200。
/ 除法 `expr $b / $a` 結果為 2。
% 取餘 `expr $b % $a` 結果為 0。
= 賦值 a=$b 將把變量 b 的值賦給 a。
== 相等。用於比較兩個數字,相同則返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用於比較兩個數字,不相同則返回 true。 [ $a != $b ] 返回 true。
6、關系運算符
關系運算符隻支持數字,不支持字符串,除非字符串的值是數字。
運算符 說明 舉例
-eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
-ne 檢測兩個數是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 檢測左邊的數是否大於右邊的,如果是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左邊的數是否小於右邊的,如果是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左邊的數是否大等於右邊的,如果是,則返回 true。 [ $a -ge $b ] 返回 false。
-le 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 [ $a -le $b ] 返回 true。
7、佈爾運算符列表
運算符 說明 舉例
! 非運算,表達式為 true 則返回 false,否則返回 true。 [ ! false ] 返回 true。
-o 或運算,有一個表達式為 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 與運算,兩個表達式都為 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
8、 文件測試運算符列表
操作符 說明 舉例
-b file 檢測文件是否是塊設備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
-c file 檢測文件是否是字符設備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
-d file 檢測文件是否是目錄,如果是,則返回 true。 [ -d $file ] 返回 false。
-f file 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。 [ -f $file ] 返回 true。
-g file 檢測文件是否設置瞭 SGID 位,如果是,則返回 true。 [ -g $file ] 返回 false。
-k file 檢測文件是否設置瞭粘著位(Sticky Bit),如果是,則返回 true。 [ -k $file ] 返回 false。
-p file 檢測文件是否是具名管道,如果是,則返回 true。 [ -p $file ] 返回 false。
-u file 檢測文件是否設置瞭 SUID 位,如果是,則返回 true。 [ -u $file ] 返回 false。
-r file 檢測文件是否可讀,如果是,則返回 true。 [ -r $file ] 返回 true。
-w file 檢測文件是否可寫,如果是,則返回 true。 [ -w $file ] 返回 true。
-x file 檢測文件是否可執行,如果是,則返回 true。 [ -x $file ] 返回 true。
-s file 檢測文件是否為空(文件大小是否大於0),不為空返回 true。 [ -s $file ] 返回 true。
-e file 檢測文件(包括目錄)是否存在,如果是,則返回 true。 [ -e $file ] 返回 true。
二、常用腳本命令舉例說明
例子太長為瞭簡寫,隻列舉一個
1、nginx的日志我們存儲在nginx.log裡,統計出2020年4月23號的訪問ip次數,並且按照次數降序排序
例:192.168.1.20 – – [21/Apr/2020:14:27:49 +0800] “GET /1/index.php HTTP/1.1” 404 490 “-” “Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0”
cat nginx.log | grep 23/Apr/2020 | awk -F "-" '{print $1}'|sort|uniq -c | sort -r | awk '{print $1,$2}'
2、nginx的日志我們存儲在nginx.log裡,統計2020年04月23日20-23點的去重IP訪問量
例:192.168.1.20 – – [21/Apr/2020:14:27:49 +0800] “GET /1/index.php HTTP/1.1” 404 490 “-” “Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0”
cat nginx.log | grep 23/Apr/2020:2[0-3] | awk '{print $1}' | sort | uniq | wc -l
3、nginx的日志我們存儲在nginx.log裡,寫腳本統計訪問3次以上的IP
例:192.168.1.20 – – [21/Apr/2020:14:27:49 +0800] “GET /1/index.php HTTP/1.1” 404 490 “-” “Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0”
cat nginx.log | awk '{print $1}'| sort | uniq -c | awk '{if ($1 >3) print $0}' | sort -r | awk '{print $1,$2}'
awk的數據字段變量
$0表示整行文本
$1表示文本中第一個數據字段
$2表示文本中第二個數據字段
$n表示文本中第n個數據字段
4、netstat命令運行的結果放在netstat.txt,查看和本機3306端口建立連接並且狀態是established的所有IP,按照連接數降序排序
例:tcp 0 0 172.16.56.200:41856 172.16.34.144:3306 ESTABLISHED
cat netstat.txt | grep ESTABLISHED | grep 3306 | awk '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -hr | awk '{print $1,$2}'
5、統計網段內在用或者未用IP
#!/bin/bash for ip in `seq 0 255` do ping -c 1 -i 0 192.168.2.$ip if [ $? -eq 0 ] then echo "192.168.2.$ip" >> /root/up.txt else echo "192.168.2.$ip" >> /root/down.txt fi done
6、讀取文件行數,一行行的循環讀取
例:cat http
www.baidu.com
www.cityhouse.cn
www.cityre.cn
vim htttp.sh
cat /data/script/http | while read line do curl $line done date=`date "+%Y-%m-%d-%H-%M-%S"` echo "sucessful$date" >> /data/script/http.txt
到此這篇關於linux下shell常用腳本命令及有關知識的文章就介紹到這瞭,更多相關inux下shell腳本命令內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!