Shell基礎與工具

1、Shell基礎git

     在計算機科學中,Shell俗稱殼(用來區別於核),是指「提供使用者使用界面」的軟件(命令解析器)。它相似於DOS下的command和後來的cmd.exe。它接收用戶命令,而後調用相應的應用程序正則表達式

一、history:命令歷史shell

!!:執行上一次命令bash

     !$:上一命令的最後一個參數編輯器

     Ctrl+r:輸入關鍵字查找歷史命令函數

     !number:執行指定命令歷史中的指定順序的命令工具

     !vi:執行以vi爲開頭的最近的命令歷史中的一條命令regexp

     history -c:清空命令歷史【實際就是清空~/.bash_history】htm

     hsitory n:列出包含history n在內的最近n條命令排序

二、Tab:補全文件或命令

三、alias:別名,主要用於簡化命令

     alias lin='cd /home'

     unalias lin:取消別名

【幾個環境配置文件】

     ~/.bashrc:用戶的我的的配置文件,從新打開shell就會執行一次。

     ~/.bash_profile:

     ~/.bash_history:

     ~/.bashrc:

     ~/.bash_logout:退出終端時執行

     /etc/profile:全部用戶的環境變量的配置文件

     /etc/bashrc:運行bash就會執行

不建議改/etc/bashrc,緣由:每打開一個shell就執行一次。作別名這類環境變量的更改時才放入bashrc中。命令的執行必定不要放這裏。

四、Shell特殊字符

     *:0個或多個任意字符

     ?:一個任意字符

     #:註釋

     \:脫義符號

     ~:用戶家目錄

     []:任選裏面的其一

     $var:引用變量var的值

     ``(反引號):先執行反引號內的命令,並用器結果代替該部分

     >:重定向

     >>追加劇定向

     2>:錯誤重定向

     2>>:錯誤追加劇定向

     <:反向重定向【2.txt < 1.txt:從1中重定向到2】

          ls /data >>1.log 2>&1【追加,&1也是1.log】

     |:將標準輸出做爲後一個命令的參數

     command &:將前面的命令丟到後臺執行

     ;:命令的邏輯行的結束

     &&:與

     jobs:查看後臺命令

          jobs -l:詳細查看後臺命令,顯示PID

     Ctrl+z:暫停當前的命令

     fg num:恢復指定num的後臺命令到前臺

     bg num:將暫停的命令放入後臺運行

     Ctrl+c:終止進程

五、變量

     默認系統變量用大寫,自定義用小寫。

     env:打印出系統的內置的變量

     set:打印出全部的變量,包括自定義的變量

     export a=1:全局變量的聲明,聲明的變量a在子shell中任然保持有效

     local b=1:局部變量聲明,經常使用戶函數中。使函數的變量做用侷限於函數內

變量名規則:

     a=1.................. 賦值符號左右不能有空格;

     變量名命名規則同C

     變量的值:有可能須要用''或""包含,注意雙引""號中會解析其中的特殊字符

     變量可疊加:a=1;b=$a'123':此時$b爲1123

     unset a:取消變量

六、Shell工具包 

     1)cut【剪切】

語法:cut -d':' -f3 文件名【指定分隔符,選擇第三段】

          cut  -c4 文件名【選擇每行的第4個字符,不能指定分隔符。還可指定區間-c2-10】

     2)sort【排序】

語法:sort [參數] 文件名

參數:

     -n:指定按照數字排序【默認用的是ASCII碼】

     -r:reversel反向排序

     -u:(uniq)排序時去除重複

-t':' -k3:指定將文件用指定符號分隔後按某一段排序【-t':' -k3,6:指定3-6段都排序】

     3)wc【統計】

語法:wc [參數] 文件名

參數:

     -l:統計行數

     -m:統計字符數,每每多出一個特殊字符

     -w:統計單詞數

     4)uniq【去重】

語法:sort ...|uniq【使用前必須排序】

     uniq -c:輸出時顯示重複的次數。

     5)tr【從標準輸出讀取字符(也就是說要用管道),替換一個或多個字符】

語法:tr [參數] 字符串1 字符串2

參數:

     -d:刪除字符串1中的全部字符

     -s:刪除重複出現的字符序列

     -c:使用字符串1的補集中的字符替換字符串2,要求爲ASCII字符集

     空:使用字符串1替換字符串2

     6)split【切割文件】【主要目的是把大文件切小,減小查看時的內存佔用】

語法:split [參數] 文件

參數:

     -b5:每一個文件5b切割文件

     -l10:每一個文件10行切割文件

注意:切割後文件名有規律變化

      7)tee【重定向加標準輸出】

語法:輸入 | tee 目的文件

二:正則表達式與強大的正則工具


一、正則表達式

正則表達式,又稱正規表示法常規表示法英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。

在這糾正一個錯誤:^表示行的起始位置,$表示行的結束位置

二、grep【過濾】【強烈建議作別名:alias grep='grep --color=auto'】

     語法:grep [參數] [正則表達式] 文件名

     參數:

-v:取反,即過濾出不含正則表達式的行

-c:打印出符合的行數,而不是內容

-n:打印行號

-i:不區分大小寫

-q:不輸出過濾後的文本結果,只返回真假

-Anum:打印該行及下面的num行

-Bnum:打印該行及上面的num行

-Cnum:打印該行及上面和下面的各num行

grep -r 'root' /etc/*:遍歷目錄,找出含有正則字符的文件

      示例:

grep '[0-9]':過濾出包含數字的行。[:digit:]:表示全部的數字

grep -v '^#':過濾以'#'開頭的行。【'^#':表示以#開頭,'3$':表示以3結尾】

grep -v '^$':去除全部空行。

grep '[^[:digit:]]':過濾出全部非數字開頭的行。【[^]:表示取反正則表達式】

grep 'ro.t':過濾出全部符合的行,正則的點表示任一字符

     grep的正則符號:
          .:任意一個字符
          *:表示0個或多個前導字符
-E:擴展正則字符
          ?:表示0我的或1個前導的字符。
          +:表示1個或多個前導字符
          ():表示將括號內的部分做爲一個總體
          |:表示或者,即符合|左右兩邊之一的都行

          {}:表示前導符出現的次數【{}內能夠是單數字或者範圍{2-3}】

三、sed【替換】

     語法:sed [參數]  '/正則表達式/'  文件名【分隔符//也可用##代替】

     參數:

-n:安靜模式,和p選項一塊兒輸出符合的項目

-i:直接操做文件!!!!!強烈不建議使用,貌似只能在替換時使用

-r:正則表達式不須要脫義

-e:用於鏈接多個正則表達式,它是一個一個的匹配。也就是可能會出現兩次

      表達式命令:

p:打印

d:刪除

s:替換

g:全局做用,常與s同用

      示例:

sed '15,$'d /etc/passwd:刪除15行及之後的行

sed 's/root/ROOT/g' /etc/passwd:將文件中的小寫root所有替換爲ROOT

sed -n '/root/p ; /gdm/p' 1.txt:用分好間隔多個正則字段

sed -r 's/(^.*)(:.*:)(\/.*$)/\3\2\1/' /etc/passwd:調換順序,注意表達式中出現間隔符時必須脫義!

sed的正則符號:

*:表示0個或多個任意字符

.:表示一個任意字符

  -r擴展正則符號:

?:表示

+:表示1個或多個前導字符

():將括號內的字符變爲一個總體

三、awk【按段進行操做】

     語法:awk [參數] '正則表達式' 文件名

     參數:

-F:指定分隔符

     示例:

awk -F':' '{print $3'--'$4}' 1.txt:打印指定的段,並在段之間添加普通符號

awk '/root/' 1.txt:過濾指定的字符串root

awk -F':' '$1=="root"' 1.txt:按段精確過濾,數字時不能用引號包圍!

awk -F':' '$3=="'$a'"' 1.txt:awk中使用外部變量精確匹配

awk -F':' '$3~/oo/' 1.txt:awk中模糊匹配

awk -F':' '/root/; $1~/lin/; $3~/50/' 1.txt:逗號分隔多個條件。每一個條件匹配完再匹配下一條件。有可能會重複...

     條件操做符:

>:大於

>=:大於等於

==:等於

!=:不等於

<=:小於等於

<:小於

awk -F':' '$7!="/sbin/nologin"' 1.txt:

awk -F':' '$3<$4' 1.txt

      awk的邏輯操做符:

&&:而且

||:或者,區別於逗號。過濾後不會出現重複

      awk內置變量:

$0:表示整行

NF:段數

NR:行號

OFS:分隔符

awk -F':' '{print $NF}' 1.txt

      awk特殊操做:

awk -F':' '{if ($1~/root/) print $0}' 1.txt:if條件操做

awk -F':' '$2="abc"' 1.txt:賦值操做,非數值加雙引【右值能夠是某一段】

awk -F':' '{(sum=sum+$3)}; END {print sum}' 1.txt:awk中定義變量

awk -F':' '$1=="root"&&$1="toor {OFS=':' ; print}"' 1.txt:OFS指定操做後的分隔符,賦值後默認分隔符爲空格

相關文章
相關標籤/搜索