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

Linux中的變量及IO管道使用

printenv 數字 才會 作用域 簡化 png tput 命名 字符轉義

  • 變量
  • 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:表示失敗                                   
      • 引號的特殊含義:

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

        技術分享圖片

      • 本地變量:僅在一個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
          技術分享圖片
      • 只讀變量:只讀變量無法重新賦值,並且不支持撤銷;存活時間為當前shell進程的生命周期,隨shell進程終止而終止;
        用法:
        declare -r var_name=value
        readonly var_name=value

        技術分享圖片

      • 查看環境變量命令: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;
        技術分享圖片
      • 配置文件的讀取順序:
        技術分享圖片
        所以如果希望在登錄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
      技術分享圖片
      有時候執行命令只關心命令有沒有執行成功而不關心輸出結果,需要用到特殊設備:/dev/null
      技術分享圖片
    • 管道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管道使用