天天看點

shell基礎知識及使用方法

shell基礎知識及使用方法

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

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

  下面就來說說bash的特性:

 一:指令的别名--(自定義指令)

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

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

注意:如果alias指令不帶任何選項和參數,則表示顯示所有已經定義并生效的别名設定;使用如下:

shell基礎知識及使用方法

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 參數 [參數...]

shell基礎知識及使用方法

           常用選項:

 -c:清空曆史緩沖區中的指令曆史記錄;

 -d:删除指定的曆史指令條目;

shell基礎知識及使用方法
shell基礎知識及使用方法

     重複執行曆史緩沖區的指令:

     !NUMBER:重複執行曆史緩沖區中編号為“NUMBER”的指令;

shell基礎知識及使用方法

     !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:輸出單詞統計數;

shell基礎知識及使用方法

     注意:

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,此處字元串,結束标記;

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