【Bash百寶箱】Linux shell學習
shell特點——
Linux有多種shell能夠使用,默認的為bash,bash有以下幾個主要特點。
1、命令記憶能力
在命令行中按上下鍵能夠找到一個前/後輸入的命令。這些命令記錄在~/.bash_history
中,這個文件記錄的是上一次登錄shell曾經所運行過的全部命令,當前登錄shell所運行的命令則暫存在暫時內存中,成功註銷系統後這些命令更新到文件裏。歷史命令可通過history
命令查看,再次運行某個歷史命令時可結合嘆號!
一起使用,嘆號後面跟歷史命令的序號。假設多重登錄bash,即開幾個bash窗體時。最後註銷的那個bash會把前面bash的歷史記錄覆蓋掉。
2、Tab鍵
在部分命令或文件未輸入全然時。按Tab
鍵一次可補全命令或文件,按Tab
鍵兩次可列出全部可用的命令或文件。
3、命令別名設置功能
使用alias
可給一個較長的命令設置一個簡單的別名。unalias
取消設置,例如以下樣例:
$alias lm=‘ls -alt‘
上面alias
命令設置別名僅僅對當前bash有效,且bash退出後別名也就失效了,怎樣設置一次就能夠永遠在全部的bash中都有效呢?方法是把上面的別名設置命令寫入~/.bashrc
文件裏,這個文件讀入shell可使用source
命令,也能夠使用句點
,或者重新啟動電腦,這樣便一勞永逸了。
4、內置命令type
通過type
命令我們能夠知道一個命令的類型。是內置命令,還是外部命令或者是一個別名。type
type
經常使用三個參數,-t
顯示命令類型,-p
僅當命令類型為外部命令時才顯示命令全路徑。-a
顯示PATH
環境變量中全部與命令相關的指令信息,也包括alias
別名命令。
5、命令運行
命令運行須要按下Enter
鍵,假設命令須要多行輸入時,可在Enter
鍵前緊接著一個\
字符進行轉義,之間不能有空格。
6、bash環境
1)路徑與命令查找有一定的順序,它們的先後順序為:相對或絕對路徑運行命令>alias
命令>builtin
命令>通過$PATH
環境變量順序找到的第一個命令。
2)我們能夠自己定義Linux登錄與歡迎信息。配置文件為/etc/issue
和/etc/motd
/etc/issue.net
是提供給telnet這個遠程登錄程序用的。
shell變量——
如其他編程語言一樣。shell中也能夠自己定義變量,但有一定的規則,總結例如以下。
1、比如常見的環境變量PATH
。變量的顯示可通過echo
命令查看,變量前要加$
符號,變量可選擇性地使用一對花括號括起來。
2、變量通過等號=
賦值,等號兩邊不能有空格。
3、變量名稱僅僅能是英文或數字,開頭字符不能為數字。
4、變量內容包括特殊字符時。可用轉義字符\
轉義。雙引號內的特殊字符如$
保持原本特性,單引號內的特殊字符如$就是個普通字符,引號成對出現,從左向右匹配。
5、在一串命令中包括了其他命令時。其他的命令能夠使用反單引號`命令`或者美元符號結合圓括號$(命令)
的方式,這樣的命令會被先運行。運行結果作為輸入信息。
6、變量累加內容時可用"$變量名稱"
或${變量名稱}
操作,例如以下:
$PATH="$PATH"xxx
$PATH=${PATH}xxx
7、變量須要在子進程生效時,export
這個變量,使其成為環境變量。
進入一個子進程能夠使用bash命令,退出時使用exit
命令。
8、取消變量時使用unset
。
9、環境變量查看可使用env
命令,使用export
命令也能夠。set
命令查看全部變量。包括環境變量和自己定義變量。
10、declare
命令用於聲明變量類型,相似於typeset
,-a
表示數組。-i
表示整數,-x
相似於export
,-r
指定變量僅僅讀。
11、幾個特殊變量:PS1
為命令提示符,PS2
為使用轉義字符後第二行命令的提示符,$
為本shell的PID,?
為上個運行命令的回傳碼,回傳碼為0表示命令運行成功。
12、read
命令能夠讀取鍵盤輸入到變量,-p
參數能夠指定提示信息,比如:
$read -p "please input your name:" name
13、ulimit
命令能夠設置用戶對系統資源使用的限制。
14、變量內容的刪除可使用#
、##
、%
、%%
符號,內容替換可使用/
、//
符號。
${變量#關鍵詞}——從左向右匹配,刪除最短數據。
${變量##關鍵詞}——從左向右匹配。刪除最長數據。
${變量%關鍵詞}——從右向左匹配。刪除最短數據。
${變量%%關鍵詞}——從右向左匹配,刪除最長數據。
${變量/舊字符串/新字符串}——從左向右匹配,刪除第一個匹配的數據。
${變量//舊字符串/新字符串}——從左向右匹配,刪除全部匹配的數據。
15、變量值測試與替換可使用-
、+
、=
、?
、:
符號等,效果例如以下:
經常使用組合鍵——
Ctrl + C:終止眼下的命令。
Ctrl + D:輸入結束EOF,可退出當前shell。
Ctrl + M:Enter鍵。
Ctrl + S:暫停屏幕的輸出。
Ctrl + Q:回復屏幕的輸出。
Ctrl + U:在提示字符下,將整行命令刪除。
Ctrl + Z:暫停眼下的命令。
常見通配符與特殊符號——
*:隨意數目個隨意字符。
?:隨意一個字符。
[abcd]:隨意一個方括號內的字符,即a、b、c、d中隨意一個。
[a-z]:隨意一個從a到z範圍內的字符。關鍵在於中間的減號。表示範圍。
[^abc]:^代表反向選擇,即除了abc之外。隨意一個其他的字符。
#:凝視符號。
\:轉義字符。
|:管線。
;:分號,連續幾個命令間的分隔符。
~:用戶主文件夾。
$:用於讀取變量。
&:工作控制。當前命令後臺作業。
!:邏輯非。
/:路徑分隔符。
>、>>:數據流重定向,輸出,各自是替換和追加。
2>、2>>:數據流重定向,錯誤輸出,數字2與尖括號之間沒有空格。
<、<<:數據流重定向。輸入。
‘ ‘:單引號。上面提到了。不具有變量替換功能。
" ":雙引號,具有變量替換功能
` `:符號之間為可運行命令,等同於$()。
( ):相當於子shell。
{ }:命令區塊的組合。
數據流重定向使用方法舉例——
stdin
、stdout
、stderr
事實上是三個特殊的文件,文件標識符分別為0、1、2,以下的樣例用到了 這幾個數字。
把純文本文件from中的內容拷貝到文件to,使用數據流重定向有以下兩種方法:
$cat from > to
$cat > to < from
有時候運行某個命令時,有標準輸出,也有標準錯誤輸出,把標準輸出重定向到文件file
:
$command > file
把標準錯誤輸出重定向到文件file
:
$command 2> file
把標準輸出、標註錯誤輸出同一時候重定向到文件file有以下三種方法:
$command > file 2>&1
$command 2> file >&2
$command &> file
註意上面數字的使用方法。
/dev/null
是一個特殊文件,能夠理解為一個無限大的垃圾站點,能夠把隨意不想要的數據重定向到這個文件裏。
命令行連續運行幾個命令——
方法一:使用分號
$command1; command2
方法二:使用&&
和||
符號
$command1 && command2
$command1 || command2
&&
和||
也就是通常所說的短路符號。
管線命令——
1、管線
管線即一個豎線|
,左邊的命令要有標準輸出,且僅會處理標準輸出。標準錯誤則忽略,右邊的命令要能接受標準輸入,以下介紹幾個經常使用的管線命令。
2、cut
以行為單位。截取部分數據。
$echo $PATH | cut -d ‘:‘ -f 1
在PATH
環境變量中,-d
指定分隔符為冒號,冒號把PATH
環境變量中的內容切割開。-f
指定截取切割後的第幾個字段,這裏為第1個字段。還能夠選擇多個字段。以逗號隔開。-d
指定的分隔符能夠是空格,例如以下命令:
$last | cut -d ‘ ‘ -f 1
$export | cut -c 10-20
-c
截取了每行第10個到第20個的字符。
3、grep
以行為單位,匹配目標字符串。匹配成功則輸出整行內容,如:
$top | grep init
以下介紹幾個經常使用的參數:
-c:計算字符串匹配的次數。
-i:忽略大寫和小寫。
-n:輸出行號。
-v:反向選擇,即輸出沒有匹配到字符串的行。
grep也能夠單獨使用,格式例如以下:
$grep [options] <string> <filename>
4、sort
sort
即排序,如:
$ls | sort -r
-r
表示反向排序。
5、uniq
uniq
用於處理反復數據,僅僅篩選一次,如:
$last | cut -d ‘ ‘ -f 1 | uniq -c
顯示每個帳號登入總次數。
6、wc
wc
統計文本中有多少行、字符串、字符,如:
$wc filename
當中,-l
能夠統計行數,-w
統計字符串。-c
統計字符。
7、tee
從前面的幾個命令能夠看出,數據流重定向到文件後。屏幕就沒有輸出了。而這個tee
就能夠雙向定向。一邊到文件,一邊到屏幕,如:
$ls | tee filename
ls
的結果重定向到filename
的同一時候也輸出到了屏幕。
8、tr
tr
用來刪除或替換字符串。
$ls | tr [a-z] [A-Z]
如上樣例,tr
把ls
的結果中的小寫字母全部替換為了大寫。
$ls | tr -d ‘string‘
-d
參數指定要刪除的字符串。
9、col
col
過濾一些數據,選項與參數:
-x:將tab鍵轉換成對等的空格鍵。
-b:在文件內有反斜杠/時。僅保留反斜杠最後接的那個字符。
10、join
把兩行數據合並為一行,格式例如以下:
$join [options] file1 file2
選項與參數例如以下:
-t <string>:join默認以空格符分隔數據。-t指定詳細的切割符。而且在file1和file2中查找string,查找成功時,把file1和file2的兩行數據連成一行,且string僅僅顯示一次。在行首顯示。
-i:忽略大寫和小寫。
-1 <num>:數字1,指定第一個文檔file1要用哪個字段來分析。
-2 <num>:數字2。指定第二個文檔file2要用哪個字段來分析。
11、paste
把多個文本行合並為一行,默認以Tab
鍵作為分隔符號,語法格式例如以下:
$paste [options] [files]
經常使用參數為-d
,指定分隔符。
12、expand
expand
將Tab
鍵轉換為空格。
13、split
將大文件分隔為多個小文件。語法格式例如以下:
$split [options] [file] PREFIX
經常使用選項為-b
。指定小文件大小。-l
參數指定小文件行數。PREFIX
為小文件前綴。能夠選擇性地指定為自己定義的字符串。
14、xargs
xargs
讀入標準輸入,以空格符或換行符作為分隔,把標準輸入分隔成多個參數,然後運行指定的命令,格式例如以下:
$xargs [options] command
比如,以下的命令,在/tmp
文件夾下查找名字為core
的文件,
$find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
……….
【Bash百寶箱】Linux shell學習