Shell腳本編程學習記錄php
Shell 腳本(shell script),是一種爲 shell 編寫的腳本程序。linux
Shell 編程跟 JavaScript、php 編程同樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就能夠了。web
Linux 的 Shell 種類衆多,常見的有:正則表達式
vim shell.shshell
#!/bin/bash //聲明腳本解釋器,這個‘#’號不是註釋,其他是註釋apache
#Program: //程序內容說明編程
#History: //時間和做者vim
使用一個定義過的變量,只要在變量名前面加美圓符號便可,如:bash
your_name="qinjx"編輯器
echo $your_name
echo ${your_name}
使用 readonly 命令能夠將變量定義爲只讀變量,只讀變量的值不能被改變。
下面的例子嘗試更改只讀變量,結果報錯:
#!/bin/bash
myUrl="http://www.google.com"
readonly myUrl
myUrl="http://www.runoob.com"
運行腳本,結果以下:
/bin/sh: NAME:This variable is read only.
使用 unset 命令能夠刪除變量。語法:
unset variable_name
變量被刪除後不能再次使用。unset 命令不能刪除只讀變量。
運行shell時,會同時存在三種變量:
a=123
read name
b=$(ls /home) 把命令的執行結果賦值給變量
echo $a
let a=a+1
系統變量
$0 這個程序的執行名字
$n 這個程序的第n個參數值,n=1...9
$* 這個程序的全部參數
$# 這個程序的參數個數
$$ 這個程序的PID
$! 執行上一個背景指令的PID
$? 上一個指令的返回值
文件比較運算符
-e filename 若是 filename 存在,則爲真 [ -e /var/log/syslog ]
-d filename 若是 filename 爲目錄,則爲真 [ -d /tmp/mydir ]
-f filename 若是 filename 爲常規文件,則爲真 [ -f /usr/bin/grep ]
-L filename 若是 filename 爲符號連接,則爲真 [ -L /usr/bin/grep ]
-r filename 若是 filename 可讀,則爲真 [ -r /var/log/syslog ]
-w filename 若是 filename 可寫,則爲真 [ -w /var/mytmp.txt ]
-x filename 若是 filename 可執行,則爲真 [ -L /usr/bin/grep ]
filename1 -nt filename2 若是 filename1 比 filename2 新,則爲真 [ /tmp/install/etc/services -nt/etc/services ]
filename1 -ot filename2 若是 filename1 比 filename2 舊,則爲真 [ /boot/bzImage -otarch/i386/boot/bzImage ]
字符串比較運算符 (請注意引號的使用,這是防止空格擾亂代碼的好方法)
-z string 若是 string 長度爲零,則爲真 [ -z "$myvar" ]
-n string 若是 string 長度非零,則爲真 [ -n "$myvar" ]
string1 = string2 若是 string1 與 string2 相同,則爲真 [ "$myvar" = "onetwo three" ]
string1 != string2 若是 string1 與 string2 不一樣,則爲真 [ "$myvar" !="one two three" ]
算術比較運算符
num1 -eq num2 等於 [ 3 -eq $mynum ]
num1 -ne num2 不等於 [ 3 -ne $mynum ]
num1 -lt num2 小於 [ 3 -lt $mynum ]
num1 -le num2 小於或等於 [ 3 -le $mynum ]
num1 -gt num2 大於 [ 3 -gt $mynum ]
num1 -ge num2 大於或等於 [ 3 -ge $mynum ]
find . -name "*.text" //在當前目錄下查找已txt爲後綴的文件
fing .-name "[a-z]*" //在當前目錄下查找開頭字母的文件
find /etc -name "host*" //查找/etc目錄下以host開頭的文件
find . -perm 755 //在當前目錄下查找屬性爲755的文件
find -user root //在當前目錄下查找屬主爲root的文件
find /var -mtime -5 //在/var下查找更改時間在5天內的文件
find /var -mtime +3 //在/var下查找更改時間在3天之前的文件
find /etc -type d //查找文件類型爲d的目錄文件
find /etc -typt l //查找文件類型爲l的連接文件
find . -size +1000000c //查找文件大小在1M的文件
^linux //以linux開頭的
$php //以php結尾的
. //匹配任意單字符
.+ //匹配任意多個字符
.* //匹配0個或多個字符
[0-9a-z] //匹配[]內任意一個字符
(linux)+ //出現屢次linux單詞
(web){2} //web出現了2次以上
\ //轉譯
grep "li qq"* //在全部文件中查找li qq文件
grep -c "file" a //在文件中查找有多少行匹配到file
grep -n "file" a //在文件中查找有多少行匹配file,同時顯示行和行號
grep -i "file" a //在文件中查找file,並不區分大小寫
grep -v "file" a //在文件中過濾掉file所在的行
grep -E "2017:22:5[0-9]" a //在文件中查找在時間在2017:22:50到59的所在行
grep -E "^[^210]" a //在文件中查找不號寒210的行
grep -E "h*p" a //查找包含h和p的行
grep -E "[5-8][6-9][0-3]" a //查找大於560小於893的行
grep -E "^d" a //在文件中查找以d開頭的行
grep -E "^[^d]" a //在文件中查找不是以d開頭的行
簡介:awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤其強大。簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各類分析處理。
awk語言的最基本功能是在文件或者字符串中基於指定規則瀏覽和抽取信息,awk抽取信息後,才能進行其餘文本操做。完整的awk腳本一般用來格式化文本文件中的信息。
一般,awk是以文件的一行爲處理單位的。awk每接收文件的一行,而後執行相應的命令,來處理文本。
格式:awk '{pattern + action}' {filenames}
pattern:查找內容
action:匹配規則
awk '{pring $0}' access.log //查找文件中的每一列
awk '{print $1"\t"$7}' access.log //查找文件中第一列和第七列
cat file | awk '$0 !~ /192.168.31.25/'|grep "php" //匹配Ip 地址的統計,!~爲不匹配
例:for i in `cat /etc/passwd | head | awk -F:'{print $1}'`
do
echo $i
done
-F---以什麼符號分割
head---去前多少行,默認是10行
簡介:sed是非交互式的編輯器。它不會修改文件,除非使用shell重定向來保存結果。默認狀況下,全部的輸出行都被打印到屏幕上。
選項 |
功能 |
-e |
進行多項編輯,即對輸入行應用多條sed命令時使用 |
-n |
取消默認的輸出 |
-f |
指定sed腳本的文件名 |
sed -n '2'p file //只打印第二行,不打印其餘行
sed -n '1,4'p file //從第一行到第四行的記錄
sed -n '/los/'p file //打印匹配los的行
sed -n '4,/los/'p file //打印從第四行到匹配los的之間全部行
sed '1,2'd file //吧第一行和第二行所有刪除
簡介:uniq命令用於報告或忽略文件中的重複行,通常與sort命令結合使用。
語法 uniq(選項)(參數)
選項:
-c或——count:在每列旁邊顯示該行重複出現的次數;
-d或--repeated:僅顯示重複出現的行列;
-f<欄位>或--skip-fields=<欄位>:忽略比較指定的欄位;
-s<字符位置>或--skip-chars=<字符位置>:忽略比較指定的字符;
-u或——unique:僅顯示出一次的行列;
-w<字符位置>或--check-chars=<字符位置>:指定要比較的字符。
uniq -c file //打印緊挨的重複行出現的次數
uniq -d file //只打印重複的行
awk '{print $1}' /var/log/httpd/access_log | sort|uniq -c //把apache網站的全部訪問ip所有統計出來,並打印出統計次數。
簡介:能夠將一個大文件分割成不少個小文件,有時須要將文件分割成更小的片斷,好比爲提升可讀性,生成日誌。
語法:split(選項)(file)PREFIX
選項:
-b:值爲每一輸出檔案的大小,單位爲 byte。
-C:每一輸出檔中,單行的最大 byte 數。
-d:使用數字做爲後綴。
-l:值爲每一輸出檔的列數大小。
PREFIX:表明前導符,可做爲切割文件的前導文件。
split -2 file spt //生成fileab,fileac....fileai等多個文件,把a文件每行分割成一個文件,每一個文件的前綴都是以file開頭的。