天天看點

Linux自學筆記——bash的基礎特性

Bash的基礎特性(1)

1.指令曆史history

環境變量;

HISTSIZE:指令曆史記錄的條數;

HISTFILE:~/.bash_history

HISTFILESIZE;指令曆史檔案記錄曆史的條數;

調用上一條指令的最後一個參數:

!$:

控制指令記錄的方式:

環境變量:HISTCONTROL

   ignoredups;忽略重複的指令;連續且相同方為重複;

   ignorespace:忽略所有以空白開頭的指令;

   ignoreboth:ignoredups,ignorespace;

修改環境變量值的方式:export 變量名=“值”

   變量指派:把指派符号後面的資料存儲于變量名指向記憶體空間;

Linux自學筆記——bash的基礎特性

history其它用法在計算機基礎章節也寫過,就此略過

2.指令補全

Bash執行指令:

内部指令;

外部指令:bash根據PATH環境變量定義的路徑,自左向右在每個路徑搜尋以給定指令命名的檔案,第一次找到即為要執行的指令;

直接補全:Tab,使用者給定的字元串隻有一條唯一對應的指令;

以使用者給定的字元串為開頭對應的指令不唯一,則再次Tab會給出清單;

3.路徑補全

把使用者給出的字元串當做路徑開頭,并在其指定上級目錄下搜尋已指定的字元串開頭的檔案名;

如果唯一:則直接補全。否則;再次Tab,給出清單;

4.指令行展開

~:展開為使用者的主目錄;

~USERNAME:展開為指定使用者的主目錄

{}:可承載一個以逗号分隔的清單,并将其展開為多個路徑

/tmp/{a,b}=/tmp/a,/tmp/b;

/tmp/{tom,jerry}/hi=/tmp/tom/hi,/tmp/jerry/hi

5.指令的執行結果

成功

失敗

Bash使用特殊變量$?儲存最近一次指令的執行狀态結果:

0:成功

1-255:失敗

echo$?

Linux自學筆記——bash的基礎特性

Bash基礎特性(2)

1.指令别名(alias)

通過alias指令來實作:

1)alias

顯示目前shell程序所有可用的指令别名;

2)alias NAME=‘VALUE’

Linux自學筆記——bash的基礎特性

note:在指令行中定義的别名,僅對目前的shell程序有效;如果想要永久有效,要定義在配置檔案中;

僅對目前使用者有效:~/.bashrc

對所有使用者有效:/etc/bashrc

Linux自學筆記——bash的基礎特性

Note:編輯配置不會立即生效,需要bash程序重新讀取配置檔案:

   Source  /path/to/config_file

   . /path/to/config_file

撤銷别名:unalias

unalias [-a] name [name...]

Linux自學筆記——bash的基礎特性

note:如果别名同原指令的名稱,則要執行原指令,可以使用”\COMMAND”

2.glob(globbing)

bash中用于實作檔案名“通配”

通配符:*,?,[]

1)*:任意長度的任意字元

2)?:任意單個字元

3)[]:比對指定範圍内的任意單個字元

[0-9]:0-9之間任意一個值;

[a-z]:不區分大小寫;

4)[^]:比對指定範圍外的任意單個字元

[^0-9]:除了0-9以外的任意單個字元;

   專用字元集合:

      [:digit:]:任意數字,相當于0-9;

      [:lower:]:任意小寫字母

      [:upper:]:任意大寫字母

      [:alpha:]

      [:alnum:]:任意數字

      [:space:]:空格

      [:punct:]:标點符号

練習:

1)顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間出現至少一位數字的檔案或目錄;

Linux自學筆記——bash的基礎特性

2)顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的檔案或目錄;

Linux自學筆記——bash的基礎特性

3)顯示/etc/目錄下,以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄;

Linux自學筆記——bash的基礎特性

4)複制/etc目錄下,所有以m開頭,以非數字結尾的檔案或目錄至/tmp/claude目錄中

Linux自學筆記——bash的基礎特性

5)複制/etc目錄下,所有以.d結尾的檔案或目錄至/tmp/claude目錄中;

Linux自學筆記——bash的基礎特性

6)複制/etc目錄下,是以有.conf結尾,且以m,n,r,p開頭的檔案或目錄至/tmp/claude目錄中;

Linux自學筆記——bash的基礎特性

3.Bash的快捷鍵

Ctrl+l:清屏,相當于clear

Ctrl+a:跳轉至指令開始處;

Ctrl+e:跳轉至指令結尾處;

Ctrl+c:取消指令的執行;

Ctrl+u:删除指令行首至光村所在處的所有内容;

Ctrl+k:除光标所在處至指令行尾部的所有内容;

4.Bash的I/O重定向及管道

程式:指令+資料

讀入資料:input

輸出資料:output

打開的檔案都由一個fd:filedescription(檔案描述符)

标準輸入:keyboard,0

标準輸出:monitor,1

标準錯誤輸出:monitor,2

I/O重定向:改變标準位置

輸出重定向:COMMAND > NEW_POS, COMMAND >>NEW_POS

>:覆寫重定向,目标檔案中的原有内容會被清除;

>>:追加重定向,新内容會追加至目标檔案尾部;

#set–C:禁止将内容覆寫輸出至已有檔案中;

   強制覆寫:>|

2>:覆寫重定向錯誤輸出資料流;

2>>追加重定向錯誤輸出資料流;

标準輸出和錯誤輸出各自定向至不同位置:

   COMMAND> /path/to/file.out 2> /path/to/error.out

合并标準輸出和錯誤輸出為同一個資料流進行重定向:

   &>:覆寫重定向

   &>>:追加重定向

   另一種方法:

   COMMAND> /path/to/file.out 2> &1

   COMMAND>> /path/to/file.out 2>> &1

輸入重定向:<

tr指令:轉換或删除字元

   tr [OPTION]... SET1[SET2]

   HERE Documentation:<<

       cat << EOF

       cat >/path/to/somefile << EOF

   管道:

   COMMAND1 | COMMAND2 | COMMAND3 |...

Note:最後一個指令會在目前shell程序的子shell程序中執行;

tee指令:

      tee [OPTION]... [FILE]...

Linux自學筆記——bash的基礎特性

1.将/etc/passwd檔案中的前5行内容轉換為大寫後儲存至/tmp/passwd.out檔案中;

Linux自學筆記——bash的基礎特性

2.将登入至目前系統上的使用者資訊中的後3行的資訊轉換為大寫後儲存/tmp/who.out檔案中;

Linux自學筆記——bash的基礎特性

Bash的基礎特性(3)

1、提供了程式設計環境

   程式:指令+資料

   程式程式設計風格:

      過程式:以指令為中心,資料服務于指令

      對象式:以資料為中心,指令服務于資料

   shell程式:提供了程式設計能力,解釋執行

   程式的執行方式:

      計算機:運作二進制指令;

      程式設計語言:

        低級:彙編

        進階:

           編譯:進階語言-->編譯器-->目标代碼

              C、C++, java

           解釋:進階語言-->解釋器-->機器代碼

              shell, perl, python

   過程式程式設計:

      順序執行

      循環執行

      選擇執行

      shell程式設計:過程式、解釋執行

        程式設計語言的基本結構:

           資料存儲:變量、數組

           表達式

           語句

shell腳本:文本檔案

      shebang:

        #!/bin/bash

        #!/usr/bin/python

        #!/usr/bin/perl    

      magic number: 魔數

      運作腳本:

        1、給予執行權限,通過具體的檔案路徑指定檔案執行;

        2、直接運作解釋器,将腳本作為解釋器程式的參數運作;

   變量:

      命名的記憶體空間;

      資料存儲方式:ASCII

        字元:110:24

        數值:110--> 8

           整型

           浮點型

      變量:變量類型

        作用:

           1、資料存儲格式;

           2、參與的運算;

           3、表示的資料範圍;

      類型:

        字元

        數值:

      程式設計程式語言:

        強類型:

        弱類型:bash

           把所有要存儲的資料統統當作字元進行

           不支援浮點數;

      邏輯運算:

        true, false

        1, 0

        與:

           1 && 1 = 1

           1 && 0 = 0

           0 && 1 = 0

           0 && 0 = 0

        或:

           1 || 1 = 1

           1 || 0 = 1

           0 || 1 = 1

           0 || 0 = 0

        非:

           ! 1 = 0

           ! 0 = 1

      短路運算:

           第一個為0,結果必定為0;

           第一個為1,第二個必須要參與運算;

        或:

           第一個為1,結果必定為1;

           第一個為0,第二個必須要參與運算;

Bash的基礎特性(4)

變量類型:

   資料存儲格式、存儲空間大小、參與運算種類;

   字元型;

   數值型:

      整型;

      浮點型;

   強類型:定義變量時必須指定類型、參與運算必須符合類型要求;調用未聲明變量會産生錯誤;

   弱類型:無須指定類型,預設均為字元型;參與運算會自動進行隐式類型轉換;變量無須事先定義可直接調用;

Bash中變量的種類:

   根據變量的生效範圍等标準;

本地變量:生效範圍為目前shell程序;隊目前shell之外的其它shell程序,包括目前shell的子shell程序均無效;

環境變量:生效範圍為目前shell程序的及其子程序;

      局部變量:生效範圍為目前shell程序中某代碼片段(通常指函數);

      位置變量:$1,$2,…來表示,用于讓腳本在腳本代碼中調用通過指令傳遞給它的參數;

      特殊變量:$?,$0,$*,$@,$#

   本地變量:

      變量指派:name=‘value’可以使用引用

        Value:

1)可以直接是字元串;name=“username”

2)變量引用:name=“$username”

3)指令引用:name=’COMMAND’,name=$(COMMAND)

變量引用:${name}, $name

    "":弱引用,其中的變量引用會被替換為變量值;

    '':強引用,其中的變量引用不會被替換為變量值,而保持原字元串;

顯示已定義的所有變量:set

Linux自學筆記——bash的基礎特性

銷毀變量:unset name

   環境變量:

      變量聲明、指派;

        export name=VALUE

        declare –x name=VALUE

      變量引用:$name,${name}

      顯示所有的環境變量:export,env,printenv

Linux自學筆記——bash的基礎特性

      銷毀:unset name

      Bash有許多內建的環境變量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,HISTFILE,PS1

   變量命名規則:

1)不能使用程式中的保留字:例如if,for;

2)不能使用數字、字母及下劃線,且不能以數字開頭;

3)見名知意;

隻讀變量:

readonly name

declare –r name

位置變量:

在腳本代碼中調用通過指令行傳遞給腳本的參數;

$1,$2,…:對應調用第1、第2等參數;

    Shift[n]

$0:指令本身;

$*:傳遞給腳本的所有參數;

$@:傳遞給腳本的所有參數;

$#;傳遞給腳本的參數的個數

示例:判斷給出的檔案的行數; 

Linux自學筆記——bash的基礎特性

Bash的配置檔案:

   按生效範圍劃分,存在兩類:

      全局配置:

        /etc/profile

        /etc/profile.d/*.sh

        /etc/bashrc

      個人配置;

        ~/.bash_profile

        ~/.bashrc

   按功能劃分存在兩類:

      Profile類:為互動式登入的shell提供配置

        全局:/etc/profile,/etc/profile.d/*.sh

        個人:~/.bash_profile

        功用:

1)用于定義環境變量;

2)運作指令或腳本;

Bashrc類:為非互動式登入的shell提供配置

    全局:/etc/bashrc

    個人:~/.bashrc

    功用:定義指令别名;定義本地變量

   Shell登入:

      互動式登入:

        直接通過終端賬号密碼登入:

        使用“su -username”或“su –l username”切換的使用者;

        /etc/peofile à /etc/profile.d/*.sh à~/.bash_profile à~/.bashrc à/etc/bashrc

      非互動式登入:

        su username

        圖形界面下打開的終端

        執行腳本

        ~/.bashrc à/etc/bashrc à/etc/profile.d/*.sh

   編輯配置檔案定義的新配置的生效方式:

繼續閱讀