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!

推薦閱讀: