Linux Bash Shell 相關特性

bash 基礎特性之:命令歷史

命令歷史:shell進程會在會話中保存此前用戶提交執行過的命令;shell

  • 查看歷史命令:
    • ~]# history
    • 定製history的功能,可經過環境變量來實現;
    • HISISIZE:shell進程可保留的命令歷史條數;
    • HISIFILE:持久保存命令歷史的文件 (.bash_history);
    • HISIFILESIZE:命令歷史文件的大小;
  • 用法:
-c:清空當前歷史命令; 
-a:將歷史命令緩衝區中命令寫入歷史命令文件中; 
-r:將歷史命令文件中的命令讀入當前歷史命令緩衝區; 
-w:將當前歷史命令緩衝區命令寫入歷史命令文件中;
-d:刪除指定命令歷史條目;
  • 顯示最近#條歷史命令 (history #);
  • 調用歷史列表中的命令 ( ! number);
  • 再次執行上一條命令 (!!);
  • 再一次執行歷史列表中最近一個以STRING開頭的命令 (!STRING);
  • 調用上一條命令的最後一個參數 (ESC+.、file !$、file alt+.);
  • 控制命令歷史的方法
    • 環境變量:HISICONTROL
    • 參數:
      ignorespace:忽略以空白字符開頭的命令;
      ignoredups:忽略以空白字符開頭的命令;
      ignoreboth:以上二者同時生效;
      echo $HISTCONTROL;
    • 修改變量值
      HISICONTROL=Ignorespace

bash 基礎特性之:命令補全

  • 命令補全:
    • shell程序在接收到用戶執行命令的請求,分析完成後,最左側的字符串會被看成命令;
    • 命令查找機制:
    • 根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名;
    • 給定的打頭字符串若是能惟一標識某命令程序文件,則直接補全;
    • 不能唯一標識某命令程序文件,再擊打一次tab鍵,會給出列表;
  • 路徑補全:
    • 在給定的起始路徑下,以對應路徑下的打頭字符串來逐一匹配起始路徑下的每一個文件 (tab);
    • 若是能唯一標識,則直接補全。不然,再一次tab給出列表;

bash 基礎特性之:命令行展開

  • ~:自動展開爲用戶的家目錄,或指定的用戶家目錄;
  • {}:可承載一個以逗號分割的路徑列表;
  • 例如:緩存

    • mkdir /tmp/{a,b},至關於 mkdir /tmp/a,mkdir /tmp/b;
    • 建立/tmp/sysroot目錄下包含如下文件;
    |--bin
    |--etc
        |--sysconfig
                |--network-scripts
    |--sbin
    |--usr
        |--local
                |--bin
        |--sbin
    |--var
        |--cache
    • tree命令:

    [options] [directory] 列出樹形目錄中目錄的內容; -l:level 指定顯示的層級;bash

bash 基礎特性之:命令的執行狀態結果

  • 命令執行的狀態結果
    • bash經過狀態返回值來輸出此結果 (成功:0,失敗:1-255);
    • 命令執行完成後,其狀態返回值保存於bash的特殊變量中 " $? ";
    • 命令正常執行時,有的還會有命令返回值,其根據命令及其功能不一樣,結果各不相同;
  • 兩種引用命令的執行結果
    • $(COMMAND)
    • `COMMAND`
    • 示例:mkdir $(date +%H-%M-%S)

bash 基礎特性之:引用

  • 強引用:' '
  • 弱引用:" "
  • 命令引用: ` `

bash 基礎特性之:快捷鍵

  • Ctrl+a:跳轉至命令行行首;
  • Ctrl+e:跳轉至命令行行尾;
  • Ctrl+u:刪除行首至光標所在處之間的全部字符;
  • Ctrl+k:刪除光標所在處至行尾的全部字符;
  • Ctrl+l:清屏(等同clear);

bash 基礎特性之:globbing

globbing:文件名通配ide

  • 星號 *:匹配任意長度的任意字符 (pa*,*pa*,*pa,*p*a*);
  • 問號?:匹配任意單個字符(pa?,??pa,p?a,p?a?);
  • 中括號[]:匹配指定範圍內的任意單個字符 ([a-z] [A-Z] [0-9] [a-z0-9]);
  • [^]:匹配指定範圍外的任意單個字符([^[:upper:]],[^0-9],[^[:alnum:]]);

bash 基礎特性之:命令hash

  • hash命令:
    • -d COMMAND,刪除
    • -r 清空hash緩存
  • 執行命令的查找順序: hash、alias、path;
  • 解釋:
    • 把命令的查找結果,緩存在緩存中就叫hash;
    • 何時須要清空hash表,hash緩存不正確時;

bash 基礎特性之:變量

  • 變量是什麼?
    • 簡單點,變量其實就是內存中的空間、然後在程序運行過程當中給取了一個名字而且能找到這段空間的起始地址,即 變量名+指向的內存空間,而後有名稱就能直接引用;
  • 變量賦值:
    • 把要存儲的數據存儲到變量名所指向的內存空間的過程,就叫作變量賦值;
  • 變量定義之變量的類型:
    • 根據存儲數據的變量類型不一樣,其經常使用環境變量有如下常見幾種...
      本地變量:做用域僅爲當前shell進程;
      環境變量:當前shell進程及其子進程;
      局部變量:做用域僅爲代碼片斷,對bash shell 而言函數上下文;
      位置參數變量:當執行腳本的shell進程傳遞的參數;
      特殊變量:指shell內置和有特殊公用的變量;
  • 變量的定義方式:
    • 本地變量
      賦值:(name=value)
      引用方法:$(name),$name
      變量替換:使用雙引號,單引號不會被替換值;
      查看變量:set
      撤銷變量:unset name
    • 環境變量
      賦值:export name=value | name=value(export name) | declare -x name=value | name=value
      引用:$(name),$name
      示例:firestname=jerry or declare -x firestname
      注意:bash內嵌了許多環境變量(一般爲大寫字符),用於定義bash的工做環境;
      (PASH,HISTFILE,HISTSIZE,HSIFLESIZE,HSITCONTROL,SHELL,HOME.UID,PWD,OLDPWD)
      查看當前shell:echo $SHELL
      查看環境變量:export、declare-x 、printenv、env
      撤銷環境變量:unset name
  • 把一個變量只讀格式:
    • declare -r name
    • readonly name,示例readonly firestname
    • 注意:不支持從新賦值且沒法撤銷,存活時間爲當前shell進程生命週期;

bash 基礎特性之:執行多條命令(短路與、短路或)

  • 短路 ‘與,&&’、短路或,‘||’
    ~]# COMMAND1;COMMAND2;COMMAND3...(其命令之間有邏輯關係)
  • 邏輯運算:就是判斷真或假
    算數若是爲真則表示爲(true,yes,on,1)
    算數若是爲假則表示爲(false,no,off,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;
    • 非,表示取反,非假即爲真
      ! 1 = 0,! 0 = 1
    • 異或,判斷是否不一樣
      兩個數字運算的結果不一樣則爲1,相同則爲0;
  • 表示法:函數

    • 與運算:&&
      ~]# COMMAND1 && COMMAND2,將兩個命令的執行結果作狀態‘與’運算;
      意義是:可實現控制功能,前面的命令運算結果取決於後面運行的命令;
      COMMAND1爲‘假’,則COMMAND2不會再執行,不然COMMAND1爲‘真’,則COMMAND2必須執行;
    • 或運算:| |
      ~]# COMMAND1 || COMMAND2,將兩個命令的執行結果作狀態‘或’運算;
      意義是:可實現控制功能,前面的命令運算結果取決於後面運行的命令;
      COMMAND1爲‘真’,則COMMAND2不會執行,不然COMMAND2爲‘假’,則COMMAND2必須執行;
      ~]# touch /tmp/test.etc && ls /etc > /tmp/test.etc
    • 注意:命令之間存在‘邏輯關係’,前面的命令結果都會取決於後面的命令;

    done

相關文章
相關標籤/搜索