shell入門總結

2022-05-26 16:18:09 字數 3409 閱讀 3978

shell入門總結

*shell特性

shell是乙個程式,他可以起到保護核心的作用,我們可以通過他和核心互動。

使用者使用過的命令儲存在家目錄下的.bash_history檔案中,與命令歷史有關的!的用法:

!!:表示執行上乙個命令

!n:n是數字,表示執行命令歷史中第n個命令

!ps:ps是字串,表示執行命令歷史中最近一次以ps開頭的命令

*shell變數

shell變數有系統變數和自定義變數,系統變數是系統自身定義的,一般是不允許更改的;自定義變數使使用者,為了更好的管理而定義的變數。

env和set命令都可以顯示變數,但是set還可以顯示自定義變數。

自定義變數注意:

(1)變數名必須是字母、下劃線和數字組成,數字不能在變數名首部,且不能為關鍵字。

(2)要想所有使用者登入後使用該變數,需要在/etc/profile檔案下方新增該變數。

(3)如果只想當前使用者使用該變數,則在使用者主目錄下.bashrc的檔案裡新增該變數。

(4)定義變數後,需要用export宣告下,讓該shell的子shell也知道該變數。

*系統和使用者的環境變數配置檔案

/etc/profile:系統的環境變數在這裡定義

/etc/profile.d:使用者自定義的系統變數

/etc/bashrc:主要定義ps1和umask

下面四個檔案在主目錄下:

.bash_profile:定義個人的環境資訊和路徑

.bashrc:定義個人的shell資訊

.bash_history: 記錄歷史命令資訊

.bash_logout:退出shell時,執行該檔案,可以把一些清理工作放在這個檔案中

.bashrc和.bash_profile區別:.bash_profile呼叫.bashrc,login shells執行.bash_profile;nologin shells執行.bashrc。

*shell中的特殊符號

「*」代表零個或多個任意字元

「?」只代表乙個任意字元

「+」代表乙個或多個任意字元

「#」代表注釋符號

「\」脫意符號,後面出現的特殊符號還原成普通符號

「|」管道符,將管道前的結果傳遞給管道符後面的命令,不是所有的命令都可以使用管道符,一般對文件進行統計的命令都可以。

「$」變數的識別符號,並且可以和「!」組合使用,「!$」代表上一條命令的引數。

「;」輸入多條命令時的分隔符。

「~」使用者的家目錄。

「&」執行這個可以把任務放在後台執行。

「>,>>,2>,2>>」重定向符號,>和》代表取代和追加,2>和2>>代表錯誤資訊取代和追加。

「[ ]」代表中間字元任意乙個

linux特殊符號大全:

*常用文件檢視工具:cut,sort,tee,uniq,tr,split

cut:

-d:後面跟分隔符,用引號括起來

-f:指定第幾段

-c:後面只跟數字,表示擷取幾個字元,可以使乙個數字,也可以是n1,n2,表示區間n1-n2;也可以是n1,n2,n3。

sort:

-t:後面跟分隔符

-n:使用純數字排序

-r:反向排序

-u:去重複

-kn1,n2:由n1到n2區間排序,也可以寫成-kn1,既對n1欄位排序

如果使用-nu,sort會把文件中的字母看成0

uniq:用來去重

-c:統計重複的行數,並把結果寫在結果最前面

使用uniq前,必須要排序,否則不管用

tee:

tee命令類似於重定向,但是比重定向多乙個功能,他可以把結果標準輸出

tr:常用來替換字元

-d:常用來刪除字元,後面接需要刪除的字元

split:

-b:依據大小來分割文件,單位byte

-l:依據行來分割

使用split分割,原始檔還在

*shell中的鏈結符號

(1)command1;command2:兩個命令都執行

(2)command1&&command2:command1執行成功,才執行command2,否則command2不執行

(3)command||command2:command1執行成功,command2不執行,否則command2執行

*grep過濾

語法選項:grep [-cinvabc] 'word' filename

-c:列印符合要求的行數

-n:在輸出符合要求的行的時候把行號也輸出

-v:列印不符合要求的行

-a:後跟數字,表示列印符合要求的行以及下面兩行

-b:後跟數字,表示列印符合要求的行以及上面兩行

-c:後跟數字,表示列印符合要求的行以及上下各兩行

-r:會把目錄下所有檔案遍歷

-color:把匹配到的關鍵字用紅色標示

例項:過濾出帶有某個關鍵字的行並輸出行號

#grep -n 『root』 /etc/passwd

過濾出不帶某個關鍵字的行並輸出行號

#grep -n -v 『root』 /etc/passwd

過濾出所有包含數字的行

#grep 『[0-9]』 /etc/passwd

過濾出所有不包含數字的行

#grep '[0-9]' /etc/passwd

去除以#開頭和空的行

#grep -v '^#' /etc/passwd | grep -v '^$'

過濾出英文本母開頭的行

#grep '^[a-za-z]' /etc/passwd

注:grep不支援+和?,只有egrep支援。

*sed

sed可以實現grep大部分功能,而且還可以查詢替換。

sed 『10』p -n /etc/passwd :是print的意思,-n是列印出符合規則的行,如果不加-n則會把全部列印出來。

sed -n 『/ro.t/』p /etc/passwd:可以使用特殊符號

sed '/root/d' /etc/passwd :刪除指定行

sed 『1,2s/ot/to/g』 /etc/passwd:替換,s是替換的意思,g是全域性的意思

head -n2 /etc/passwd | sed -r 's/(root)(.*)(bash)/3\2\1/' :在sed中可以用()表示乙個整體,本例子中,調換root和bash的位置

後面的\1\2\3,分別表示第乙個括號,第二個括號,以及第三個括號。

使用sed命令不會更改原始檔,但是加上-i就會更改原始檔。

*awk

awk很強大,相對的也很靈活複雜。

-f:指定分隔符

ofs:指定輸出分隔符

nf:段數

nr:行數

例項:擷取文件的某段

#awk -f 『:』 『』 /etc/passwd

Shell命令入門

必要引數 a 全部檔案系統列表 h 方便閱讀方式顯示 h 等於 h 但是計算式,1k 1000,而不是1k 1024 i 顯示inode資訊 k 區塊為1024位元組 l 只顯示本地檔案系統 m 區塊為1048576位元組 no sync 忽略 sync 命令 p 輸出格式為posix sync 在...

shell基礎入門

linux中有好多中不同的shell,但是通常我們使用bash bourne again shell 進行shell程式設計,因為bash是免費的並且很容易使用。所以在本文中筆者所提供的指令碼都是使用bash 但是在大多數情況下,這些指令碼同樣可以在 bash的大姐,bourne shell中執行 ...

shell 指令碼入門

shell 是乙個用 c 語言編寫的程式,它是使用者使用 linux 的橋梁。shell 既是一種命令語言,又是一種程式語言。shell 是指一種應用程式,這個應用程式提供了乙個介面,使用者通過這個介面訪問作業系統核心的服務。ken thompson 的 sh 是第一種 unix shell,win...