鳥哥的Linux私房菜認識與學習bash複習

bash shell的主要優點:歷史命令(history)
命令與文件的補全功能
命令別名alias
任務管理 前臺 後臺
程序化腳本
通配符
查詢命令是否爲Bash內置的命令 :type [-tpa] name
例如:查詢一下ls是否爲bash內置
type ls
在type不加任何選項時,type會顯示出ls是內置命令還是外部命令
-t:會顯示alias或builtin(表示是內置命令)或file(表示是外部命令)

shell的變量功能

1.echo:讀出變量的內容
例:echo ${PATH}
2.設置或是修改變量的內容:用=連接變量和他的內容就好
如果變量沒有被設置,echo ${myname} 就是空的
myname=asdf
echo ${myname} 就是顯示asdf

變量設置規則

1等號兩邊不能有空格
例如:myname = sadf 和 myname=sdfasdf sadfadsf
錯誤
2變量名稱只能是英文或是數字,但開頭不能是數字
3變量內容若有空格可以用雙引號或是單引號
但是雙引號內的變量可以保有原有功能
單引號內的爲純文本
4可以用轉義符\ 來將特殊字符轉義
5如果一串命令中用到其他的命令可以用反單引號`命令`或是$(命令),第二種更常用
6若該變量爲擴增變量內容時,可用 ${變量}累加內容
如:PATH=${PATH}:/home/bin
7若該變量需要在其他子進程中使用需要用export來設置爲環境變量
8取消變量的方法是使用:unset 變量名稱

環境變量的功能

查看目前的環境變量:env或export
直接env就會列出所有的環境變量
直接set就會列出所有的變量

常見環境變量說明:

HOME:代表用戶的根目錄
SHELL:告訴我們目前這個環境使用的shell是那個程序
HISTSIZE:與歷史命令有關
PATH:執行文件查找路徑
LANG:語系數據
PS1:提示字符的設置,就是每次在終端下的命令提示字符
$:關於本shell的PID
?:關於上個執行命令的返回值(如果命令執行成功則返回0,不成功返回錯誤代碼)

子進程只會有父進程的環境變量,對於用戶自定義的變量則沒有
可以用export將用戶自定義的變量設置爲環境變量
影響顯示結果的語系變量(locale)
變量鍵盤讀取 read
-p:後面可以接提示字符
-t:後面可以接等待的秒數.
read之後不加任何參數,直接加上變量名稱,就會主動出現一個空白行等待你的輸入
declare:聲明變量的類型(是數組還是整數),默認是字符串類型
declare [-axir] 變量名
-a :將那個變量定義爲數組類型
-i :將那個變量定義爲整數類型
-x :作用等於export,將那個變量變成環境變量
-r :將變量設置爲readonly類型,該變量不可被更改內容,也不能unset

在默認的情況下,變量類型默認爲字符串類型,所以若不指定類型,則1+2爲一個字符串而不是計算式.另外,Bash環境的數值計算默認最多僅能到達整數形態,所以1/3結果是0

與文件系統和程序的限制關係:ulimit
用來限制別的用戶可以使用的系統資源例如可以開啓的文件數量等

變量內容的刪除和替換

#:符合替換文字的最短的哪一個(從前往後)
##:符合替換文字的最長的哪一個(從前往後)
%:最短的哪一個(從後往前)
%%:最長的哪一個(從後往前)

例如:path=${PATH}
echo ${path}
echo ${path#/*local/bin:}
意思是從左往右刪除掉 有local/bin:的最短的那個

變量內容的替換:

${變量/舊字符串/新字符串} 若變量內容符合舊字符串,則第一個舊字符串會被新字符串替換
${變量//舊字符串/新字符串} 若變量內容符合舊字符串,則全部的舊字符串會被新字符串替換

命令別名:alias
歷史命令:history
!!: 執行上一個命令
!1000 執行第一千個命令
!al 執行最近以al爲開頭的命令

路徑與命令的查找順序:

1以相對路徑或絕對路徑執行命令 例如/bin/ls
2有alias找到該命令執行
3有bash內置的命令來執行
4通過$PATH變量的順序來執行

bash的環境配置文件

分爲全局系統配置文件用戶個人偏好配置文件
如果想要將命令別名,自定義的變量在註銷Bash後仍然生效就要將這些設置寫入配置文件纔行
login shell :取得bash是需要完整的登錄流程,就稱爲login shell ,例如:有tty1到tty6登錄需要輸入用戶的賬號和密碼,此時取得的bash就稱爲login shell
non-login shell :取得bash的方法不需要重複登錄的操作,例如:以X Window登錄Linux後,在以X的圖形化接口啓動終端,此時這個終端接口並沒有需要再次的輸入賬號和密碼,此時的bash環境就稱爲non-login shell ,再例如:進入子進程,也是non-login shell
這兩個取得bash的情況,讀取的配置文件不同
在login shell下所讀取的整體環境配置文件其實只有/etc/profile但是/etc/profile還會調用其他的配置文件,接下來就是讀取用戶的個人配置文件,有三個:~/.bash_profile ~/.bash_login ~/.profile 只會讀取一個,且是依序進行的.
另外~/.bash_profile還會調用~/.bashrc
source或小數點. :讀入環境配置文件的命令
用法:source 配置文件名或
. 配置文件名

non-login shell 僅會讀取~/.bashrc
如何查看目前的一些按鍵代表的意義:stty
stty -a 列出所有的按鍵意義
stty eof ^h 意思是設置[Ctrl]+h 作爲結束輸入的意思

通配符

* :代表0到無窮多個任意字符
? :代表一定有一個任意字符
[] :代表一定有一個在括號內的字符,例如[abcd]代表一定有一個字符可能是a,b,c,d中的任何一個
[-]:代表在編碼順序內的所有字符,例如[0-9]代表0到9之間的所有數字,因爲數字的語系編碼是連續的
[^]:若中括號內第一個字符爲^,則表示反向選擇,例如[^abc],代表不是a,b,c中的任意一個字符

數據流重定向:

標準輸入:代碼爲0.使用<或<<
標準輸出:代碼爲1.使用>或>>
標準錯誤輸出:代碼爲2,使用2>或2>>
>:以覆蓋的方式將正確的數據輸出到指定的文件或設備上
>>:以累加的方式將正確的數據輸出到指定的文件或設備上
2>:以覆蓋的方式將錯誤的數據輸出到指定的文件或設備上
2>>:以累加的方式將錯誤的數據輸出到指定的文件或設備上
例如:find /home -name .bashrc > right 2> error
意思是把正確的數據存到right文件中,把錯誤的信息存到error文件中,屏幕上不會有任何輸出.
/dev/null 垃圾桶黑洞設備
就是把錯誤信息丟掉,不存到文件中./dev/null會把所有導向他的數據丟到
例如:find /home -name .bashrc > right 2> /dev/null
<的用法:就是把原本由鍵盤輸入的數據,改由文件內容來替換

命令執行的判斷依據: ; && ||

; 用在不考慮命令相關性的連續命令執行
&& 和||的用法 :
一般command1 && command2 || command3
意思是 若cmd1成功執行cmd2
若cmd1失敗執行cmd3

管道命令:

管道命令僅會處理標準輸出,對於標準錯誤會予以忽略
管道命令必須要能夠接受來自前一個命令的數據成爲標準輸入繼續處理纔行.

管道命令:選取命令:cut,grep
cut用法:cut -d '分隔字符' -f fields
-c :以字符爲單位取出固定字符區間
意思是用分隔字符把信息化成幾段,-f 後加第幾段的意思
例如:echo ${PATH} | cut -d ':' -f 5
echo ${PATH} | cut -d ':' -f 5,6

grep [-acinv] ‘查找字符’ filename
-c :計算找到查找字符的次數
-i :忽略大小寫的不同
-n :輸出行號
-v :反向選擇即顯示出沒有查找字符的哪一行
與cut 的分段取第幾段的不同就是grep是有該關鍵詞就取出該行
排序命令:sort ,wc, uniq

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章