1. 程式人生 > >Linux中BASH的特性

Linux中BASH的特性

bash linux

Shell本身是應用程序,是用戶與操作系統之間完成交互式操作的一個接口程序,為用戶提供簡化的操作。

Bourne Again Shell,簡稱bash,是Linux系統中默認的shell程序。


Bash的特性:


一、命令的別名(自定義命令)

alias(內嵌命令),定義或顯示別名

使用\COMMAND ,將使用原本的命令而不是自定義後的命令

註意:如果alias命令不帶任何選項和參數,則表示顯示所有已經定義並生效的別名設置


# alias ALIAS=‘COMMAND [OPTION]...[ARGUMENT]...‘

unalias,從別名定義列表中刪除一個名字


-a,刪除所有別名定義


註意:無論使用alias還是unalias,其功能都會立即生效;但是這兩個命令的生命周期等於當前shell的生命周期,一旦註銷此次登錄,相當於關閉了bash,則使用alias命令定義的別名或使用unalias命令刪除的別名會立即失效。每個用戶有一個私有bash文件在用戶家目錄中,文件名為.bashrc,修改後重新啟動bash程序或者source命令或"."才會生效,


二、bash的快捷鍵:

C:表示ctrl鍵

M:表示Alt鍵

E:表示ESC鍵

DEL:表示backspace鍵

常用:

C-l:清屏

C-a:把光標跳轉到行首

C-e:把光標跳轉到行尾

C-k:刪除光標所在位置至行尾的內容

C-u:刪除光標所在位置至行首的內容

C-c:結束前臺進程

M-.:引用上一個命令當中的最後一個參數(在Xshell中不能使用)

E,.:功能同M-.


三、命令歷史:

Bash進程會保存其繪畫中的用戶曾經執行過的命令,以方便用戶重復執行某個操作;

命令歷史包括兩個方面:

1.用戶曾經執行過的命令

2.用戶曾經執行過的命令的路徑


在Bash中有一個內置的變量--PATH,PATH變量的值為當前系統中所有的命令的文件所在的路徑的集合


命令如何被shell執行的?

Bash會將命令行的內容按照空白字符進行切片,判斷第一個切片的內容是內部命令還是外部命令,如果是內部命令則直接運行,

如果是外部命令,先找hash表中的路徑緩存,如果有,則直接執行;否則需要通過查找PATH中包含路徑中是否有包含對應名稱的文件


使用hash命令查看被記住的命令文件的路徑

-r,清空哈希表


使用history命令查看被記住的命令的命令行參數;

-c,清空歷史緩沖區的命令歷史記錄

-d OFFSET,刪除指定行命令


重復使用歷史緩沖區的命令

!OFFSET,直接調用history中對應行的命令

!STRING,以STRING開頭的最後的一次命令

!?STRING,包含了STRING的最後一次命令

!-NUMBER,倒數第NUMBER次的命令


C-r,查找命令

!$,在歷史緩沖區中調用最後一個命令的最後一個參數

!^,最後一個命令的第一個參數

!:NUMBER,在歷史緩沖區中調用最後一個命令的第NUMBER位置的參數

!SEQUENCE:NUMBER,調用第SEQUENCE行的命令的第NUMBER位置的參數


在bash中與命令歷史相關的內置變量

HISTSIZE,歷史緩沖區能保存的最大條目數量,默認是1000

HISTFILESIZE,~/.bash_history文件中能夠保存的命令歷史最大條目數,默認1000

HISTTIMEFORMAT,在命令歷史緩沖區中記錄命令時同時記錄命令執行的時間戳,可以使用date命令的FORMAT來表示時間的記錄格式,默認值為空

HISTCONTROL,控制命令歷史的記錄方式,當為以下值時

ignoredups,忽略連續且相同的命令,為默認值

ignorespace,忽略以空白字符開頭的命令

ignoreboth,以上兩種情況都不會被記錄


四、命令補全

1.構成命令字符串的補全

參考PATH變量中的路徑,對命令進行補全(tab鍵)。如果給出的字符串在PATH變量對應的路徑中是唯一的,則直接補全命令,如果給出的字符串在PATH變量對應的路徑不唯一,則bash給出提示(兩下Tab鍵)

2.命令中參數所對應的字符串的補全

根據給出的路徑進行補全


五、命令行展開

1.~,bash會自動將其展開為當前登錄用戶的家目錄

~STRING,bash會自動將其展開為以STRING為用戶名的家目錄


~+,調用bash的內置變量"PWD"的值

~-,調用bash的內置變量"OLDPWD"的值


2.{},

在"{}"中,可以填充一個以","分隔的路徑填充的列表,bash會將其展開為單獨的命令

1.txt{,.bak} == 1.txt 1.txt.bak


六、命令的執行結果

在bash中命令的執行結果有兩種

1.執行命令的輸出結果


命令引用或命令替換

``或$(),引用命令的輸出結果


2.執行命令的狀態返回值

表示此前的一個命令是否成功執行

bash使用 $? 變量來保存其內容,其取值範圍為0到255,其中0表示命令執行成功,1-255表示命令執行失敗

1,2,127是bash內置的命令執行失敗的狀態返回值

1一般表示一些小問題

2表示嚴重問題

127表示命令本身出現問題

其余數字用戶可以自定義錯誤信息


七、引用功能

強引用‘‘,bash在處理時,引用的內容全部視為普通字符,但單引號本身除外

弱引用"",有些特殊字符仍然會保留特殊含義,如$、 \、 ""


八、轉義功能

\,bash所定義的轉義字符,只能夠將其後面一個字符轉義

\COMMAND,取消定義過的命令別名,使用原本的功能


九、Globbing——文件名通配符,簡稱為glob

*,匹配任意長度的任意字符或者字符串,某些特殊位置的. 字符不能匹配

?,匹配任意單個字符,某些特殊位置的. 字符不能匹配

[],匹配指定範圍內的任意單個字符,必須且只能匹配一個字符

指定範圍的方法:

1.枚舉法,列出所有有效字符

2.範圍指定,

[0-9],表示所有單個十進制數字

[a-z],a,A,b,B,...,y,Y,z

[A-Z],A,b,B,c,...,Y,z,Z

3.bash內建字符集

[:lower:],所有小寫字母

[:upper:],所有大寫字母

[:alpha:],所有字母

[:digit:],所有一位數字

[:alnum:],所有字母數字

[:punct:],所有的符號

[:space:],表示空白字符,包括空格和制表符

4.反向匹配 ^

實例: #ls a[^[:dight:]]??


十、管道

|,通常用來連接多個命令,將管道符號前面的命令輸出結果作為後一個命令的參數


wc,統計文件或字符串的字節、行、字數

-c,僅顯示文件中的字節數

-m,僅顯示文件中有效字符的數量

-l,僅顯示文件的行數

-w,僅顯示文件中字的數量



十一、輸入輸出重定向

在使用計算機的時候,實現某個功能的主體是程序

程序=指令+數據

數據是至關重要的


在Linux系統中,能夠完成輸入和輸出功能的實體:文件

可以用於輸入的設備:文件

鍵盤設備、文件系統中的常規文件、網卡設備、聲卡設備、磁盤設備等;

可以用於輸出的設備:文件

顯示器、文件系統中的常規文件、網卡設備、聲卡設備,磁盤設備


在內存中使用文件的方式是定義文件描述符,一個文件描述符對應一個文件

0,表示標準輸入,鍵盤輸入的數據流

1,表示標準輸出,到顯示器的輸出數據流

2,表示標準錯誤,到顯示器的錯誤數據流


輸入輸出重定向(IO重定向):采用非標準設備文件實現的IO操作

輸入重定向

<,大多時候可省略


輸出重定向

>,覆蓋輸出重定向

~]# set -C 開啟防止以外覆蓋源文件開關,可以使用">|"符號完成覆蓋重定向輸出的操作,而無需關心是否開啟此開關

~]# set +C 關閉防止以外覆蓋源文件開關


>>,追加輸出重定向


錯誤重定向

2>

2>>


合並標準輸出和標準錯誤的重定向

1.COMMAND {>|>>} /PATH/TO/SOMEFILE 2>&1

2.&>、 &>>


特殊的設備文件

/dev/null 位桶

/dev/zero 泡泡機,吐零機


bash中的特殊符號

<<,此處文檔,結束標記

<<< ,此處字符串,結束標記


Linux中BASH的特性