bash 創建一個子bash
-n 查看是否有錯誤
-x 逐行顯示信息
$:顯示當前PID
PPID :顯示父進程PID
SHLVL :顯示當前shell是幾級shell
pstree 顯示進程樹
-p 同時顯示進程號
ps -ef 顯示進程信息
本地變量 :僅對當前SHELL有效,對子SHELL也無效
環境變量:對當前SHELL及子SHELL均有效。
set 顯示本地變量和環境變量
env 顯示環境變量
變量賦值
變量名=變量值(可以是$(命令) 、$[$變量+n])
export 變量名 定義環境變量
export 變量名=變量值 定義環境變量
declare -x 變量名=變量值 定義環境變量
本地變量查詢 set 同時查本地和環境
環境變量查詢
env
printenv
export
declare -x
均為查詢環境變量,管道,接grep 變量名查詢單個變量
刪除變量
unset 變量名
變量只讀
readonly 變量名
declare -r 變量名
查詢所有只讀變量
readonly -p
位置變量:在腳本中通過調用命令行傳遞給腳本的參數
$1,$2,$3, 等等 分別對應第一個第二個第三個參數 參數以空格為間隔
$* 代表傳入腳本的所有參數。
$0 代表命令本身。
$@傳遞給腳本的參數,每個參數為獨立字符串
$# 傳遞給腳本的參數的個數
set — 清空所有位置變量
變量引用
$變量名
“$變量名”
$(變量名)
當變量值當中包含換行符,如果希望引用出的值同樣包含換行符,只能使用”$變量名”
+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 …) 乘法時要轉譯* ,即\*
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc
算數運算 help let
+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 …) 乘法時要轉譯* ,即\* 且沒有乘方。
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc
read 指定腳本變量
read -p 提示語句
read -s 靜默輸入
數組:儲存多個元素的連續的內存空間,相當于多個變量的集合。
數組索引 : 編號從0開始,屬于數值索引
索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,bash4.0版本之后開始支持
bash的數組支持索引號不連續,如陣列 00 01 02 10 11 12 20 21 22等等
數組聲明
declare -a 數組名 (可以不定義直接使用)
關聯數組 declare -A 數組名
數組查詢 declare -a 可以查詢系統中定義了那些數組
-A 可以查詢系統中定義了那些關聯數組
賦值
單個單元賦值 數組名【編號】=變量
如: int[0]=4 ; i=0; int[$i]=4 ; int[0]=$(命令)
一次賦值全部元素
如: int=({1..100})
int=(“a1” “a2” “a3″ …)
賦值特定元素
如:int=([0]=”a1″ [3]=”a2”)
交互式數組賦值
read -a 數組名
追加元素定義
數組名【${#數組名[*]}】=變量值
引用 ${數組名[下標號]} :引用單個元素 不寫下標為數組第一個元素
${數組名[*或者@]} :引用全部元素,以空格為間隔。
${#數組名[*或者@]}:引用數組的個數為變量。
刪除數組
unsettle 數組名【數組下標】 刪除單個元素
unset 數組名 刪除整個數組
切片應用;
數組的切片應用
${數組名:offset:number}
offset:要跳過的元素個數 (不寫從頭取n個) ${數組名::number}
number :要取出的元素個數 (不寫取出之后所有。)${數組名:offset}
變量的切片應用
變量長度 如:${#a}
${a:offset:number}
offset 跳過前n個字符
number 取n個字符
${a:offset: -length}
offset 跳過左側的n個字符
length 去掉最右邊n個字符
${a: -length}
length 從右邊取n個字符
${a: -levgth:-offset}
先從最右側向左取到length個字符再從這個字符開始向右取到距離最右側offset個字符之間的內容。
注意:-length前有一個空格?。?!
基于模式取子串
${變量#*字符串}
當在變量中匹配到第一個字符串之后,刪除第一個字符串與字符串之前的內容。
${變量##*字符串}
刪除自左向右最后一個字符串之前的內容。
${變量%*字符串}
與#相反為從右向左刪除到右邊第一次出現的最后一個字符。
${變量%%*字符串}
與##相反,刪除自右向左最后一個字符串之前的內容。(均刪除字符串)
${變量/pattern/substr} 匹配到的第一個字符串替換成substr字符串
pattern 為變量中有的匹配的字符串
substr 替換的字符串
${變量//pattern/substr} 匹配到的所有字符串全部替換成substr字符串
${變量/#pattern/substr} 行首如果匹配就替換
${變量/%pattern/substr} 行尾如果匹配就替換
替換成空就是刪除。
${變量^^} :把變量中的所有小寫轉換成大寫
${變量,, } 把變量中的所有大寫轉換成小寫
高級變量用法 有類型變量
declare 選項 變量名
-r 聲明或顯示只讀變量
-i 將變量定義為整數型
-a 將變量定義為數組
-A 將變量定義為關聯數組
-f 顯示已定義的所有函數名及內容
-F 僅顯示已定義的所有函數名
-x 聲明或顯示環境變量和函數
-l 聲明變量為小寫
-u 聲明變量為大寫
eval 該命令將會首先掃描命令行進行所有的置換,然后再執行該命令。該命令適用于那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。
mktemp 創建臨時文件。
mktemp /tmp/file.xxxx
最少三個x
-d 創建臨時目錄
-p 指定路徑
mktemp -p 路徑 file.xxx
install 結合了cp chmod chusr 三個命令的功能。
實現了 把文件拷貝過去,然后改所屬人、所屬組,然后改權限。
-m 權限 如:755
-o 屬主
-g 屬組
install 選項。。。 【-T】 源文件 目的文件名 單文件
install 選項。。。 源文件。。。 目的目錄
install 選項。。。 -t 目的目錄 源文件。。。
install 選項。。。 -d 目的目錄。。。 創建空目錄。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87256