特殊變量shell
這個應該很是重要吧,不知道你們的規矩,是很危險的.json
$# 傳給腳本的參數的個數.vim
$0 腳本本身的文件的名字.數組
$1 $2 $3 … $n 這個是腳本的第 n 個參數bash
$@ 傳給腳本的全部參數的列表數據結構
$* 以一個字符串數組的方式,顯示全部的腳本參數,與位置變量不一樣,參數能夠超過 9 個.curl
$$ 是腳本運行的但前PID號.函數
$? 表明最後命令退出狀態,0 表示沒有錯誤,這個值就是c語言main函數裏最後return 的數值.工具
for循環優化
定量循環
for ((i=1;i<10;i++));do #your code done
迭代循環
for i in $(var);do #your code done
泛循環
這個名稱不大準確,大概意思就是,循環反問變量的意思
for i in 變量1 變量2 變量3;do #不用加$ echo $i done輸出 變量1 變量2 變量3 這樣子,這樣就能夠在for裏面循環處理每一個變量的東東.
判斷文件加是否存在
if [ ! -d "release" ];then #do somethine you like fi
-d 表示檢查後面的字符表示的文件夾是否存在. ! 表示取反
判斷文件是否存在
if [ -f "test" ];then #do your code fi
可使用!取反
中途強制結束腳本執行
寫一個demo以下:
die(){ ret=$? if [ "$ret" != "0" ];then echo "EXECUTE FAIL"; exit $ret; fi } programs1 || die programs2 || die
這樣就保證了program1 執行成功後,纔會執行program2 .
原理分析.
shell中的json字符處理
這個在經過curl作http請求的時候很是有用,由於返回的常常是一個json字符串,使用的工具是 jq (json query);
解析json字符:
cat {json file} | jq 這個就會在控制檯以讓人能夠讀的形式進行打印json格式.
查詢json內容:
cat {json file} | jq {.key1.key2} 這個就是從 json 的root 開始查找key1,再在key1結構中查找key2,依次類推, 以 . 爲分割,一層一層的向下找 第一個點必須有,表明root,
把字符串分割爲數組
空格間隔的字符串分割爲數組
string="a b c d"; arry=($string) for s in ${arry[@]};do echo $s; done
把任意字母分割的數組
原理,也是使用 arr=($var) 的形式進行轉換的, arr=($var) 使用一個bash的運行變量 IFS 進行分割,默認這個變量爲 ‘ ‘ 空格,只要改變這個變量便可使用咱們想要的分割方法進行分割
str="a,b,c,d"; OLD_IFS=$IFS IFS="," #以','分割字符 #也可使用多個字符做爲分割字符好比 # IFS='b,c' 這樣的話arr=($str) 後,arr[0]=a, arr[1]=,d arr=($str) IFS=$OLD_IFS
在bash中讀取文件
所有讀取
content=`cat ‘{file name}’`
讀取一行處理
#第一種方法 while read line;do echo $line #處理line,line裏就是一行 done < '{file name}' #方式二, 貌似這個方式更優雅一些呢 cat '{file name}'|while read line; do echo $line #處理這一行 done #方式三,其實這個不是一行一行的讀取,而是分空格讀取的,即:一行裏有空格後,就按兩行看待 for line in `cat {file name}`;do echo $line done
利用統計數據,繪製統計圖表
這個功能主要用於方便的宏觀的查看統計數據,數字不是很直觀呢,
利用gnuplot繪製圖表
gnuplot是一個gnu組織下的一個科學統計出圖的軟件,功能強大,簡單的統計着實有點牛刀殺雞的感受.
這個東東出來的東西,利用的數據,是一種以 空格 或者 tab 分割的數據矩陣,而且 全部的數據中,不能有空格,空格在這種數據結構中是有特殊意義的
能夠利用perl ,bash字符操做等手段,生成這樣的數據.
使用,這裏主要繪製2d圖形
gnuplot -e ‘set term png; set output 「{output image path}」; plot 「{data file}」 using 1:3 with lines; ‘
-e 後面的是gnuplot的命令;直接運行gnuplot會進入互交式界面.
set term png 指示gnuplot以png格式輸出.
set output 「{output file path}」 指定gnuplot的輸出文件路徑,gnuplot會生成一個png文件.
plot 「{data file}」 using 1:3 with lines 以data file的數據繪製圖表,使用數據的第1列和第3列繪製,其中,第一個使用的 列,被gnuplot默認使用爲x軸.第二列將被使用爲y軸,若是使用 splot 命令進行3d圖形繪製,第三列數據被使用爲z軸, with lines 是說把數據文件中的 數據集 以線的形式鏈接,一個文件中能夠有多個數據集,查看 gnuplot使用說明
額外的命令:
set xdata time 設置x軸的數據是時間格式, 默認是數字,使用 set xdata 命令恢復數字模式.
set timefmt 「%Y-%m-%d %H:%M%S」 設置時間的格式,
set xlabel 「Time」 設置x軸的label. 相似的還有 set ylabel 「YValue」; set zlabel 「ZValue」
plot|splot 後面跟的with lines 這個就是說繪製圖形處理的時候加的附加設置,詳細查看 gnuplot使用說明
文本處理
把多個空格替換爲一個,
方式不少,這裏介紹sed替換
df | sed 's/ \{1,\}/ /g'
使用s命令進行替換, sed手冊 後面的正則:{} 表示從幾個到幾個,沒有的參數自適應(無限多) {還須要轉意, {1,}就是至少一個, 至多不限制的意思, perl中,和vim中的正則會略有變化, vim中,使用* 表示前一個字符重複一次或屢次, perl中, 使用 + 表示前面一個或多個.
數組的操做
#按照索引值取內容 a="${array_name[index]}" #取全部數組的內容,通常用於循環和數組轉化爲字符串 all="${array_name[@]}" #切片start開始,數number個,numbers不寫表示取剩下的所有 slice="${array_name[@]:start:number}"
字符串的操做
#切片 和數組差很少, #看來shell默認若是有空格就按空格樹index,沒有就一個字符一個字符數index slice="{var:start:number}" #去右側,也就是最後幾個字符 last="${var:-length}" # 有關#和% #是刪去左邊的字符(包括指定字符),查找順序是從左往右,#即是找第一個,##找最後一個. %是刪去右邊的字符(包括指定字符),查找順序是從右到左,%是第一個,%%是最後一個. #*{word} 表示刪去第一個word左邊的字符, %{word}* 表示刪去第一個word右邊的字符.