Linux中的變數及IO管道使用
阿新 • • 發佈:2018-12-30
- 變數
- 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中生效
用法:- export name=value
- name=value
export name - declare -x name=value
- 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 - 如何讓配置檔案中變數生效
- 通過命令列重複定義一次;
- 讓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地址: