網(wǎng)站首頁 編程語言 正文
一、需要記住的一些知識點
1、變量類型
運行shell時,會同時存在三種變量:
1) 局部變量
局部變量在腳本或命令中定義,僅在當(dāng)前shell實例中有效,其他shell啟動的程序不能訪問局部變量。
2) 環(huán)境變量
所有的程序,包括shell啟動的程序,都能訪問環(huán)境變量,有些程序需要環(huán)境變量來保證其正常運行。必要的時候shell腳本也可以定義環(huán)境變量。
3) shell變量
shell變量是由shell程序設(shè)置的特殊變量。shell變量中有一部分是環(huán)境變量,有一部分是局部變量,這些變量保證了shell的正常運行
2、shell變量說明
$$
Shell本身的PID(ProcessID)
$!
Shell最后運行的后臺Process的PID
$?
最后運行的命令的結(jié)束代碼(返回值)
$-
使用Set命令設(shè)定的Flag一覽
$*
所有參數(shù)列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數(shù)。
$@
所有參數(shù)列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數(shù)。
$#
添加到Shell的參數(shù)個數(shù)
$0
Shell本身的文件名
$1~$n
添加到Shell的各參數(shù)值。$1是第1參數(shù)、$2是第2參數(shù)…。
3、單引號和雙引號和反引號的區(qū)別
以單引號
' '
包圍變量的值時,單引號里面是什么就輸出什么,即使內(nèi)容中有變量和命令(命令需要反引起來)也會把它們原樣輸出。
以雙引號" "包圍變量的值時,輸出時會先解析里面的變量和命令,而不是把雙引號中的變量名和命令原樣輸出。以反引號` `(在鍵盤esc下面),命令替換是指Shell可以先執(zhí)行命令,將輸出結(jié)果暫時保存,在適當(dāng)?shù)牡胤捷敵觥?梢杂弥付ㄗ兞恐付?/p>
4、shell轉(zhuǎn)義字符
?\\?? ?反斜杠
\a?? ?警報,響鈴
\b?? ?退格(刪除鍵)
\f?? ?換頁(FF),將當(dāng)前位置移到下頁開頭
\n?? ?換行
\r?? ?回車
\t?? ?水平制表符(tab鍵)?
\v?? ?垂直制表符
5、?算術(shù)運算符列表
運算符? ? ? ?說明? ? ? ? ? ? ? ? ? ? ? ? ?舉例
+? ? ? ? ? ?加法? ? ? ? ? ? ? ? ? ?`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。
==? ? ? ? 相等。用于比較兩個數(shù)字,相同則返回 true。?? ?[ $a == $b ] 返回 false。
!=? ? ? ?? 不相等。用于比較兩個數(shù)字,不相同則返回 true。?? ?[ $a != $b ] 返回 true。
6、關(guān)系運算符
關(guān)系運算符只支持?jǐn)?shù)字,不支持字符串,除非字符串的值是數(shù)字。
?運算符? ? ? ? ? ? ? 說明? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例
-eq? ? ? 檢測兩個數(shù)是否相等,相等返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? [ $a -eq $b ] 返回 true。
-ne? ? ? 檢測兩個數(shù)是否相等,不相等返回 true。? ? ? ? ? ? ? ? ? ? ? ? [ $a -ne $b ] 返回 true。
-gt? ? ?? 檢測左邊的數(shù)是否大于右邊的,如果是,則返回 true。?? ?[ $a -gt $b ] 返回 false。
-lt? ? ? ??檢測左邊的數(shù)是否小于右邊的,如果是,則返回 true。?? ?[ $a -lt $b ] 返回 true。
-ge? ? ? 檢測左邊的數(shù)是否大等于右邊的,如果是,則返回 true。?? ?[ $a -ge $b ] 返回 false。
-le? ? ? ?檢測左邊的數(shù)是否小于等于右邊的,如果是,則返回 true。?? ?[ $a -le $b ] 返回 true。
7、布爾運算符列表
運算符? ? ? ? ? ? ? ? ? ? ?說明? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例
!? ? ? ?非運算,表達(dá)式為 true 則返回 false,否則返回 true。?? ?[ ! false ] 返回 true。
-o?? ?或運算,有一個表達(dá)式為 true 則返回 true。? ? ? ?[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a?? ?與運算,兩個表達(dá)式都為 true 才返回 true。? ? ? ?[ $a -lt 20 -a $b -gt 100 ] 返回 false。?
8、?文件測試運算符列表
操作符? ? ? ? ?說明? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?舉例
-b file?? ?檢測文件是否是塊設(shè)備文件,如果是,則返回 true。? ? ? ? ? ? ? ? ? ?[ -b $file ] 返回 false。
-c file?? ?檢測文件是否是字符設(shè)備文件,如果是,則返回 true。? ? ? ? ? ? ? ? [ -b $file ] 返回 false。
-d file?? ?檢測文件是否是目錄,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ -d $file ] 返回 false。
-f file?? ?檢測文件是否是普通文件(既不是目錄,也不是設(shè)備文件),如果是,則返回 true。?? ?[ -f $file ] 返回 true。
-g file?? ?檢測文件是否設(shè)置了 SGID 位,如果是,則返回 true。? ? ? ? ? ? ? ? [ -g $file ] 返回 false。
-k file?? ?檢測文件是否設(shè)置了粘著位(Sticky Bit),如果是,則返回 true。? ?[ -k $file ] 返回 false。
-p file?? ?檢測文件是否是具名管道,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ?[ -p $file ] 返回 false。
-u file?? ?檢測文件是否設(shè)置了 SUID 位,如果是,則返回 true。? ? ? ? ? ? ? ? [ -u $file ] 返回 false。
-r file?? ?檢測文件是否可讀,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ -r $file ] 返回 true。
-w file?? ?檢測文件是否可寫,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[ -w $file ] 返回 true。
-x file?? ?檢測文件是否可執(zhí)行,如果是,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ -x $file ] 返回 true。
-s file?? ?檢測文件是否為空(文件大小是否大于0),不為空返回 true。? ?[ -s $file ] 返回 true。
-e file?? ?檢測文件(包括目錄)是否存在,如果是,則返回 true。? ? ? ? ? ? ?[ -e $file ] 返回 true。
二、常用腳本命令舉例說明
例子太長為了簡寫,只列舉一個
1、nginx的日志我們存儲在nginx.log里,統(tǒng)計出2020年4月23號的訪問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的日志我們存儲在nginx.log里,統(tǒng)計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里,寫腳本統(tǒng)計訪問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表示文本中第一個數(shù)據(jù)字段
$2表示文本中第二個數(shù)據(jù)字段
$n表示文本中第n個數(shù)據(jù)字段
4、netstat命令運行的結(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)計網(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
原文鏈接:https://blog.csdn.net/icanflyingg/article/details/121435343
相關(guān)推薦
- 2022-12-13 Python按天實現(xiàn)生成時間范圍序列的方法詳解_python
- 2022-11-10 Android自定義DataTimePicker日期時間選擇器使用詳解_Android
- 2022-03-31 C語言與C++項目實現(xiàn)相互調(diào)用_C 語言
- 2023-03-17 Android?ViewModel與Lifecycles和LiveData組件用法詳細(xì)講解_Andr
- 2022-08-14 在WPF中使用多線程更新UI_C#教程
- 2022-04-15 C++中構(gòu)造函數(shù)詳解_C 語言
- 2022-04-03 Python中的tkinter庫簡單案例詳解_python
- 2022-04-05 h5給input元素type=file的對象賦值報錯
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支