1. 程式人生 > >Linux中的變數及IO管道使用

Linux中的變數及IO管道使用

  • 變數
  • io重定向
  • pipe

  • var-變數
    數學的方程式:設x=2,求y=x^2+2x+1 ?,x和y我們稱為未知數,在shell指令碼中稱為變數,變數用來儲存資料,指向記憶體空間的某個地址,當指令碼中重複執行一長串相同程式碼時,可以使用變數替換,簡化程式碼量,方便開發。

    • 變數賦值
      var_name=value
    • 變數名命名規則:
      1.變數名只能包含數字、字母和下劃線,而且不能以數字開頭;
      2.變數名最好見名知義,命名機制遵循某種法則;不能夠使用程式的保留字,例如if, else, for, while等等,不同版本稍有區別;
    • bash shell系統中的變數無需宣告可以直接呼叫
    • 變數引用:$var_name /${var_name}
    • 變數型別:

      本地變數:作用域僅為當前shell程序;
      環境變數:作用域為當前shell程序及其子程序;
      區域性變數:作用域僅為某程式碼片斷(函式上下文);
      位置引數變數:當執行指令碼的shell程序傳遞的引數;
      特殊變數:shell內建的有特殊功用的變數;
                                  $?:判斷上一條命令的執行結果
                                  0:表示成功,1~255:表示失敗                                   
    • 引號的特殊含義:

      單引號'':強引用,所有字元原樣輸出,不轉義
      雙引號"":弱引用;輸出引號內所有內容;若內容中有變數、特殊字元轉義等會解析結果,然後在輸出
      反引號``:用於引用命令結果如同$(..)

      Linux中的變數及IO管道使用

    • 本地變數:僅在一個shell中有效,子程序不生效
      用法:var_name=value
      檢視變數:set | grep var_name
      撤銷變數:unset var_name

    • 環境變數:在當前shell的所有子shell中生效
      用法:
      1. export name=value
      2. name=value
        export name
      3. declare -x name=value
      4. name=value
        declare -x name
        Linux中的變數及IO管道使用
    • 只讀變數:只讀變數無法重新賦值,並且不支援撤銷;存活時間為當前shell程序的生命週期,隨shell程序終止而終止;
      用法:
      declare -r var_name=value
      readonly var_name=value
      Linux中的變數及IO管道使用

    • 檢視環境變數命令:export, declare -x, printenv, env,set

    • 但當再重新開啟一個終端是,環境變數無效只在當前shell生效,需要定義在全域性環境變數配置檔案中才會生效。在登入系統時並啟動一個shell,一般會載入配置檔案中的環境變數。載入的檔案跟登入的方式相關。
      bash配置檔案分為兩類:
      -profile:為互動式登入shell程序提供配置
      全域性:對所有使用者都生效;
      /etc/profile
      /etc/profile.d/*.sh
      使用者個人:僅對當前使用者有效;
      ~/.bash_profile
      用途:
      1、用於定義環境變數;
      2、執行命令或指令碼;
      -bashrc:為非互動式登入shell程序提供配置
      全域性:
      /etc/bashrc
      使用者個人:
      ~/.bashrc
      用途:
      1、定義本地變數;
      2、定義命令別名;
      登入與非登入shells:
      登入shells:
      1.任何通過使用者登入的shell包括圖形介面登入
      2.su -
      非登入shells:
      1.su
      2.圖形介面下的終端
      3.指令碼
      4.其他bash例項
    • 下面通過在xuetong使用者中的四個配置檔案中新增echo "/path-dir"來驗證載入的檔案:/etc/profile,/etc/bashrc,~/.bahs_profile,~/.bashrc;
      Linux中的變數及IO管道使用
    • 配置檔案的讀取順序:
      Linux中的變數及IO管道使用
      所以如果希望在登入shell和非登入shell都能讀到的檔案應將變數設定在:~/.bashrc,/etc/bashrc
    • 如何讓配置檔案中變數生效
      1. 通過命令列重複定義一次;
      2. 讓shell程序重讀配置檔案;
        source /path/conf_file
        . /path/conf_file

  • IO重定向
    IO:input output,程式的資料流有三種:
    輸入資料流:預設標準輸入為鍵盤 stdin
    輸出資料流:預設標準輸出為顯示器 stdout
    錯誤輸出流:錯誤輸出也是通過顯示器 stderr
    分別使用檔案描述:0、1、2
    當我們不希望資料通過標準輸入輸出時,通過io重定向方法修改:
    輸出重定向: >
    特點:會覆蓋原有的內容
    輸出追加重定向:>>
    特點:在原有的內容後面追加輸出
    錯誤輸出流重定向:2> 、2>>
    合併輸出流(標準輸出、錯誤輸出):
    1.&>,&>>
    2.COMMAND > /path/to/somefile 2>&1
    COMMAND >> /path/to/somefile 2>&1
    輸入重定向:<
    多行文字輸入:<<
    cat << eof
    cat > /path/to/somefile << eof
    Linux中的變數及IO管道使用
    有時候執行命令只關心命令有沒有執行成功而不關心輸出結果,需要用到特殊裝置:/dev/null
    Linux中的變數及IO管道使用
  • 管道pipe
    用於連線程式,實現將前一個命令的輸出直接定向後一個程式當作輸入資料流
    語法:
    COMMAND1 | COMMAND2 | COMMAND3 | ...
    例如:# tail -n 6 /etc/passwd | tr 'a-z' 'A-Z'
    tr命令:把輸入的資料當中的字元,凡是在SET1定義範圍內出現的,通通對位轉換為SET2出現的字元,或者輸出字元
    用法1:
    tr SET1 SET2 < /PATH/FROM/SOMEFILE
    用法2:
    tr -d SET1 < /PATH/FROM/SOMEFILE
    比如取出網絡卡的IP地址:
    Linux中的變數及IO管道使用