1. 程式人生 > >shell基礎知識及使用方法

shell基礎知識及使用方法

基礎知識 shell 使用方法

shell基礎知識及使用方法

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

第一代shell在上世紀70年代中於貝爾實驗室中誕生,名為bourne shell,簡稱sh,後期又衍生出多個版本,如csh,ksh等;而Linux系統中默認的shell程序是由GNU發行的bash,它是完全開源的。

下面就來說說bash的特性:

一:命令的別名--(自定義命令)

alias:(help alias查詢)定義或顯示別名

格式:alias [-p] [名稱[=值] ... ]

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

技術分享

unalias:從別名定義列表中刪除每一個“名字“。它的用法和alias差不多。

註意:無論使用alias命令或unalias命令,其功能都會立即生效;此命令的生命期僅為當前shell的生命期;一旦註銷登陸,相當於關閉bash,則使用alias命令定義的別名或使用unalias命令刪除的別名操作,會立即失效;

對於每個用戶來說,都有一個私有的bash的配置文件,在用戶家目錄中的一個隱藏文件,文件名為“.bashrc”,其主要功能時用來保存命令的別名的定義;


二.bash 的快捷鍵;

c:ctrl鍵

M:alt鍵

E:esc鍵

DEL:backspace鍵



C-l:清屏,相當於clear命令;

C-a:將光標跳轉至命令行編輯模式的行首;

C-e:將光標跳轉至命令行編輯模式的行尾;

C-k:刪除命令行編輯模式的光標所在位置至行尾的內容;

C-u:刪除命令行編輯模式的光標所在位置至行首的內容;

C-c:結束前臺進程;

M-:引用上一個命令的最後一個參數;

E:功能同M-;


三.命令歷史:

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

命令的歷史包括兩個方面:

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

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

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


命令是如何執行的?

bash會將命令行的內容按照空白符進行切片,分析第一個切片的內容;


1.判斷第一個切片的內容是內部命令還是外部命令;

如果是內部命令,則直接運行;

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


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

-r:忘記所有記住的位置;

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

history-顯示或操縱歷史列表。

格式:

history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 參數 [參數...]技術分享



常用選項:

-c:清空歷史緩沖區中的命令歷史記錄;

-d:刪除指定的歷史命令條目;

技術分享

技術分享




重復執行歷史緩沖區的命令:

!NUMBER:重復執行歷史緩沖區中編號為“NUMBER”的命令;技術分享

!STRING:重復執行歷史緩沖區中以“STRING”開頭的最後一次 執行過的命令;

!?STRING:重復執行歷史緩沖區中包含了“STRING”的最後一次 執行過的命令;

!-NUMBER:重復執行歷史緩沖區中倒數第“NUMBER”條命令;


使用上下Arrow可以從歷史緩沖區調用命令,回車之 後執行;

C-r:在歷史緩沖區實施搜索,回車之後執行;




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

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

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





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

HISTSIZE:歷史緩沖區中能夠保存的命令歷史的最大條目數量,默 認值為1000.

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

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

HISTCONTROL:控制命令歷史的記錄方式:

ignoredups:連續且相同的命令不會被記錄到歷史緩沖區;此為 默認值;

ignorespace:以空白字符開頭的命令不會被記錄到歷史緩沖區;

ignoreboth:上述兩種情況都不會被記錄到歷史緩沖區;


四.命令補全

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

參考PATH變量中的路徑,對命令進行補全;

如果,給出的字符串在PATH變量對應的路徑時唯一的,則直接補全命令;

如果,給出的字符串在PATH變量對應的路徑時不是唯一的,則bash給出提 示;



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

根據給出的路徑進行補全;

如果,給出的字符串在給出的路徑中是唯一的,則直接補全命令;

如果,給出的字符串在給出的路徑中不是唯一的,則bash給出提示;



五.命令行展開

1.~展開:

~:bash會自動將其展開為當前登陸用戶的家目錄;

~STRING:bash會將其自動的展開為以“STRING”為用戶名的用戶的家目 錄;

~+:調用bash的內置變量的“PWD”的值;

~-:調用bash的內置變量的“OLDPWD”的值;



2.{}展開:

在{}中,可以填充一個以“,”分割的路徑判斷列表,bash 會將其展開為 多個獨立的路徑;

1.txt{,.bak}==1.txt 1.txt.bak(cp)




*六.命令的執行結果

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

1.執行命令的輸出結果;

根據用戶的需求獲取到的命令執行的正常輸出結果;

命令引用或命令替換;


``(反向單引號)相當於$()

示例:創建一個文件,文件名為test-系統時間;

~]:#touch test-~date +%F+%H-%M-%S~




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

與此前的一個命令是否成功執行相關的返回內容;

bash使用一個特殊的內置變量來保存其內容:$?

$?實際上保存的是一個數值,保存範圍0-255


其中:

0:表示執行成功;

1-255:表示命令執行失敗;

1,2,127:bash中內置的命令執行的狀態返回值;

1:表示小問題;

2:表示大問題;

127:表示命令本身出現問題;

其余數字(3-126,128-255):用戶可以自定義的失敗狀態返回值;





七.引用功能;


``:強引用;

凡是被單引號引用的內容,bash在處理時,一律將其視為普通字符,,及 其本身是bash定義的具有特殊功能和作用字符亦是如此,但單引號本身除 外



“”:弱引用;

被雙引號引用的內容中,有些特殊字符仍然胡保留其特殊含義,如$,\,"";




八.轉義功能;

\:bash定義的轉義字符;大多數情況下,\只能將其後面的一個字符轉義;


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





*九.Globbing--文件名通配符,簡稱glob;

*:匹配任意長度的任意字符或字符串;(某些特殊位置的“.”字符不能 匹配;)

?:匹配任意單個字符;(某些特殊位置的“.”字符不能匹配;)

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


指定範圍的方法:

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

2.範圍指定

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

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

[A-Z]:A,b,B,c,C........z,Z


3.bash內建字符集;

[:lower:]:所有的小寫字母;

[:upper]:所有的大寫字母;

[:alpha]:所有字母,包括大小寫;

[:digit]:所有單個的十進制數字;

[:alnum:]:所有的字母和十進制數字;

[:punct:]:所有的符號;

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


4.反向匹配;

^

示例:#ls a [^[:digit:]]?? 表示文件名的第二個字符不能是十進制數 字;


註意:當括號中有“^”表示字符集反向匹配時,註意"*"的使用;因 為"*"通配範圍可能會導致反向匹配失敗,此類失敗是因為bashd的 globbing是在貪婪模式下匹配的;



十.管道

|

管道通常是用來連接多個命令的,將管道符號前面的命令的執行的輸出結 果通過管道傳遞給管道符號後面的命令,讓後面的命令將前面的命令的輸 出結果當成參數使用;


wc:

wc - 輸出文件中的行數、單詞數、字節數

格式: wc [選項列表]... [文件名列表]...

常用選項:

-c, --bytes, --chars輸出字節統計數。

-l, --lines輸出換行符統計數;

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

-w, --word:輸出單詞統計數;技術分享


註意:

1.一般來講,凡是被管道連接的命令,都應該能夠在執行成功之後完成命 令結果的輸出;否則管道無意義;

2.管道不是萬能的,有些場合無法使用管道;



十一.輸入輸出重定向

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


程序=指令+數據(數據至關重要!)


文件,IO--輸入輸出


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


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

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


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

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



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

0:表示標準輸入,stdin,從鍵盤實現的輸入數據流;

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

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


輸入輸出重定向(IO重定向)

采用非標準設備文件實現的IO操作;


輸入重定向:

<


輸出重定向:

>:覆蓋輸出重定向;

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

>>:追加輸出重定向;


錯誤重定向:

2>:覆蓋錯誤重定向;

2>>:追加錯誤重定向;



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

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

2.&>,&>>



特殊的設備文件;

/dev/null: BlackHole,Bitbucket(位桶);

/dev/zero:泡泡機,吐零機;



bash中的其他特殊符號:

*<<:here document:此處文檔,結束標記;

<<<:here string,此處字符串,結束標記;

上述就是我的收獲,但是還有很多沒有弄清楚,在後期我會多加練習,再加以修改。







本文出自 “計算機基礎” 博客,轉載請與作者聯系!

shell基礎知識及使用方法