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...