Linux中的變量及IO管道使用
阿新 • • 發佈:2018-12-30
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中生效
用法:- 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地址:
Linux中的變量及IO管道使用