欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux下shell常用腳本命令及有關(guān)知識(shí)

 更新時(shí)間:2021年12月02日 09:28:54   作者:三顆草丶  
大家好,本篇文章主要講的是linux下shell常用腳本命令及有關(guān)知識(shí),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

一、需要記住的一些知識(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)文章

最新評(píng)論