linux下shell常用腳本命令及有關(guān)知識(shí)
一、需要記住的一些知識(shí)點(diǎn)
1、變量類(lèi)型
運(yùn)行shell時(shí),會(huì)同時(shí)存在三種變量:
1) 局部變量
局部變量在腳本或命令中定義,僅在當(dāng)前shell實(shí)例中有效,其他shell啟動(dòng)的程序不能訪問(wèn)局部變量。
2) 環(huán)境變量
所有的程序,包括shell啟動(dòng)的程序,都能訪問(wèn)環(huán)境變量,有些程序需要環(huán)境變量來(lái)保證其正常運(yùn)行。必要的時(shí)候shell腳本也可以定義環(huán)境變量。
3) shell變量
shell變量是由shell程序設(shè)置的特殊變量。shell變量中有一部分是環(huán)境變量,有一部分是局部變量,這些變量保證了shell的正常運(yùn)行
2、shell變量說(shuō)明
$$
Shell本身的PID(ProcessID)
$!
Shell最后運(yùn)行的后臺(tái)Process的PID
$?
最后運(yùn)行的命令的結(jié)束代碼(返回值)
$-
使用Set命令設(shè)定的Flag一覽
$*
所有參數(shù)列表。如"$*"用「"」括起來(lái)的情況、以"$1 $2 … $n"的形式輸出所有參數(shù)。
$@
所有參數(shù)列表。如"$@"用「"」括起來(lái)的情況、以"$1" "$2" … "$n" 的形式輸出所有參數(shù)。
$#
添加到Shell的參數(shù)個(gè)數(shù)
$0
Shell本身的文件名
$1~$n
添加到Shell的各參數(shù)值。$1是第1參數(shù)、$2是第2參數(shù)…。
3、單引號(hào)和雙引號(hào)和反引號(hào)的區(qū)別
以單引號(hào)
' '
包圍變量的值時(shí),單引號(hào)里面是什么就輸出什么,即使內(nèi)容中有變量和命令(命令需要反引起來(lái))也會(huì)把它們?cè)瓨虞敵觥?br /> 以雙引號(hào)" "包圍變量的值時(shí),輸出時(shí)會(huì)先解析里面的變量和命令,而不是把雙引號(hào)中的變量名和命令原樣輸出。以反引號(hào)` `(在鍵盤(pán)esc下面),命令替換是指Shell可以先執(zhí)行命令,將輸出結(jié)果暫時(shí)保存,在適當(dāng)?shù)牡胤捷敵???梢杂弥付ㄗ兞恐付?/p>
4、shell轉(zhuǎn)義字符
?\\?? ?反斜杠
\a?? ?警報(bào),響鈴
\b?? ?退格(刪除鍵)
\f?? ?換頁(yè)(FF),將當(dāng)前位置移到下頁(yè)開(kāi)頭
\n?? ?換行
\r?? ?回車(chē)
\t?? ?水平制表符(tab鍵)?
\v?? ?垂直制表符
5、?算術(shù)運(yùn)算符列表
運(yùn)算符? ? ? ?說(shuō)明? ? ? ? ? ? ? ? ? ? ? ? ?舉例
+? ? ? ? ? ?加法? ? ? ? ? ? ? ? ? ?`expr $a + $b` 結(jié)果為 30。
-? ? ? ? ? ? 減法? ? ? ? ? ? ? ? ?? `expr $a - $b` 結(jié)果為 10。
\*? ? ? ? ? ? 乘法? ? ? ? ? ? ? ? ? ?`expr $a \* $b` 結(jié)果為 ?200。
/? ? ? ? ? ??除法? ? ? ? ? ? ? ? ? ?`expr $b / $a` 結(jié)果為 2。
%? ? ? ? ? 取余? ? ? ? ? ? ? ? ? ?`expr $b % $a` 結(jié)果為 0。
=? ? ? ? ? ?賦值? ? ? ? ? ? ? ? ? ?a=$b 將把變量 b 的值賦給 a。
==? ? ? ? 相等。用于比較兩個(gè)數(shù)字,相同則返回 true。?? ?[ $a == $b ] 返回 false。
!=? ? ? ?? 不相等。用于比較兩個(gè)數(shù)字,不相同則返回 true。?? ?[ $a != $b ] 返回 true。
6、關(guān)系運(yùn)算符
關(guān)系運(yùn)算符只支持?jǐn)?shù)字,不支持字符串,除非字符串的值是數(shù)字。
?運(yùn)算符? ? ? ? ? ? ? 說(shuō)明? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例
-eq? ? ? 檢測(cè)兩個(gè)數(shù)是否相等,相等返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? [ $a -eq $b ] 返回 true。
-ne? ? ? 檢測(cè)兩個(gè)數(shù)是否相等,不相等返回 true。? ? ? ? ? ? ? ? ? ? ? ? [ $a -ne $b ] 返回 true。
-gt? ? ?? 檢測(cè)左邊的數(shù)是否大于右邊的,如果是,則返回 true。?? ?[ $a -gt $b ] 返回 false。
-lt? ? ? ??檢測(cè)左邊的數(shù)是否小于右邊的,如果是,則返回 true。?? ?[ $a -lt $b ] 返回 true。
-ge? ? ? 檢測(cè)左邊的數(shù)是否大等于右邊的,如果是,則返回 true。?? ?[ $a -ge $b ] 返回 false。
-le? ? ? ?檢測(cè)左邊的數(shù)是否小于等于右邊的,如果是,則返回 true。?? ?[ $a -le $b ] 返回 true。
7、布爾運(yùn)算符列表
運(yùn)算符? ? ? ? ? ? ? ? ? ? ?說(shuō)明? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例
!? ? ? ?非運(yùn)算,表達(dá)式為 true 則返回 false,否則返回 true。?? ?[ ! false ] 返回 true。
-o?? ?或運(yùn)算,有一個(gè)表達(dá)式為 true 則返回 true。? ? ? ?[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a?? ?與運(yùn)算,兩個(gè)表達(dá)式都為 true 才返回 true。? ? ? ?[ $a -lt 20 -a $b -gt 100 ] 返回 false。?
8、?文件測(cè)試運(yùn)算符列表
操作符? ? ? ? ?說(shuō)明? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?舉例
-b file?? ?檢測(cè)文件是否是塊設(shè)備文件,如果是,則返回 true。? ? ? ? ? ? ? ? ? ?[ -b $file ] 返回 false。
-c file?? ?檢測(cè)文件是否是字符設(shè)備文件,如果是,則返回 true。? ? ? ? ? ? ? ? [ -b $file ] 返回 false。
-d file?? ?檢測(cè)文件是否是目錄,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ -d $file ] 返回 false。
-f file?? ?檢測(cè)文件是否是普通文件(既不是目錄,也不是設(shè)備文件),如果是,則返回 true。?? ?[ -f $file ] 返回 true。
-g file?? ?檢測(cè)文件是否設(shè)置了 SGID 位,如果是,則返回 true。? ? ? ? ? ? ? ? [ -g $file ] 返回 false。
-k file?? ?檢測(cè)文件是否設(shè)置了粘著位(Sticky Bit),如果是,則返回 true。? ?[ -k $file ] 返回 false。
-p file?? ?檢測(cè)文件是否是具名管道,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ?[ -p $file ] 返回 false。
-u file?? ?檢測(cè)文件是否設(shè)置了 SUID 位,如果是,則返回 true。? ? ? ? ? ? ? ? [ -u $file ] 返回 false。
-r file?? ?檢測(cè)文件是否可讀,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ -r $file ] 返回 true。
-w file?? ?檢測(cè)文件是否可寫(xiě),如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[ -w $file ] 返回 true。
-x file?? ?檢測(cè)文件是否可執(zhí)行,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ -x $file ] 返回 true。
-s file?? ?檢測(cè)文件是否為空(文件大小是否大于0),不為空返回 true。? ?[ -s $file ] 返回 true。
-e file?? ?檢測(cè)文件(包括目錄)是否存在,如果是,則返回 true。? ? ? ? ? ? ?[ -e $file ] 返回 true。
二、常用腳本命令舉例說(shuō)明
例子太長(zhǎng)為了簡(jiǎn)寫(xiě),只列舉一個(gè)
1、nginx的日志我們存儲(chǔ)在nginx.log里,統(tǒng)計(jì)出2020年4月23號(hào)的訪問(wèn)ip次數(shù),并且按照次數(shù)降序排序
例: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的日志我們存儲(chǔ)在nginx.log里,統(tǒng)計(jì)2020年04月23日20-23點(diǎn)的去重IP訪問(wèn)量
例: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的日志我們存儲(chǔ)在nginx.log里,寫(xiě)腳本統(tǒng)計(jì)訪問(wèn)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的數(shù)據(jù)字段變量
$0表示整行文本
$1表示文本中第一個(gè)數(shù)據(jù)字段
$2表示文本中第二個(gè)數(shù)據(jù)字段
$n表示文本中第n個(gè)數(shù)據(jù)字段
4、netstat命令運(yùn)行的結(jié)果放在netstat.txt,查看和本機(jī)3306端口建立連接并且狀態(tài)是established的所有IP,按照連接數(shù)降序排序
例: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、統(tǒng)計(jì)網(wǎng)段內(nèi)在用或者未用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、讀取文件行數(shù),一行行的循環(huán)讀取
例: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
到此這篇關(guān)于linux下shell常用腳本命令及有關(guān)知識(shí)的文章就介紹到這了,更多相關(guān)inux下shell腳本命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux回收站機(jī)制實(shí)現(xiàn)過(guò)程及用法詳解
這篇文章主要介紹了Linux回收站機(jī)制實(shí)現(xiàn)過(guò)程及用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Ubuntu掛載3T硬盤(pán)或大于2T磁盤(pán)的方法
本篇文章主要介紹了Ubuntu掛載3T硬盤(pán)或大于2T磁盤(pán)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03BT寶塔Linux服務(wù)器管理助手架設(shè)VPS面板(安裝及初始設(shè)置應(yīng)用)
這篇文章主要介紹了BT寶塔Linux服務(wù)器管理助手架設(shè)VPS面板也是就是BT寶塔助手安裝及初始設(shè)置應(yīng)用演示,需要的朋友可以參考下2017-04-04詳解 MAC/Linux Vi配置環(huán)境變量及Java環(huán)境變量配置
這篇文章主要介紹了詳解 MAC/Linux Vi配置環(huán)境變量及Java環(huán)境變量配置的相關(guān)資料,需要的朋友可以參考下2017-06-06VirtualBox下Centos6.8網(wǎng)絡(luò)配置教程
這篇文章主要為大家詳細(xì)介紹了VirtualBox下Centos6.8網(wǎng)絡(luò)配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Linux下rsync(本地、遠(yuǎn)程)文件同步方式
這篇文章主要介紹了Linux下rsync(本地、遠(yuǎn)程)文件同步方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Linux系統(tǒng)java進(jìn)程CPU占用過(guò)高的問(wèn)題及排查
這篇文章主要介紹了Linux系統(tǒng)java進(jìn)程CPU占用過(guò)高的問(wèn)題及排查方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06