shell執行腳本是一門解釋性語言、批量化處理語言,大大的節省了工做成本css
shell腳本第一行必須以 #!開頭,它表示該腳本使用後面的解釋器解釋執行。python
#!/bin/bashnginx
1.常見的通配符:docker
* : 匹配0個或多個任意字符shell
? : 匹配一個任意字符swift
[若干字符] : 匹配方括號中任意一個字符的一次出現bash
2.命令代換:
反引號`` 或者 $()測試
//查某個容器的編號,賦值給num變量spa
num=$(docker ps -a | grep -i "test" | awk '{print$1}')code
3.單引號和雙引號
Shell腳本中的單引號和雙引號同樣都是字符串的界定符,單引號用於保持引號內全部字符的字面值,而雙引號有些狀況則特殊。若是字符串中有特殊字符須要處理時就用雙引號。
注:單引號標註的字符中不能再出現單引號。
4.條件判斷 流程控制
"if" 表達式 若是條件爲真則執行then後面的部分:
if ....; then
....
elif ....; then
....
else
....
fi
一般用" [ ] "來表示條件測試。注意這裏的空格很重要。要確保方括號的空格。
[ -f "somefile" ] :判斷是不是一個文件
[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行權限
[ -n "$var" ] :判斷$var變量是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等
例如:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
5.輸出變量前加$。例如:echo $num 或者明確一些 echo ${num}
6.執行shell腳本。先修改腳本權限增長可執行:chmod +x filename
而後,您能夠經過輸入: ./filename 來執行您的腳本。或者sh filename
7.SED 命令,替換數據
1.把開頭/結尾爲str1的行替換爲str2:
sed -i 's/^str1.*/str2/' filename ###以str1開頭 sed -i 's/.*str1$/str2/' filename ###以str1結尾 sed -i 's/.*str1.*/str2/' filename ###含有str1
sed -i 's/舊字符串/新字符串/g' filename
2.將文件中含 "arr" 字符串的數據行中的 "str1" 字符串 , 替換成爲 "str2" 字符串:
sed -e '/arr/s/str1/str2/g' filename ##含有g說明是全局替換
3.將文件中第 5 行數據 , 替換成句子"hello world!!!"
sed -e '5c\hello world!!!' filename
4.將文件中 1 至 100 行 , 替換成以下兩行:
how are you?
my name is feige.
命令以下:
sed -e '1,100c\ How are you?\ my name is feige. ' filename
1.刪除空行:
sed -e '/^ *$/d' filename ### *號前面有一個空格符哦~
2.刪除含有指定字符串str的行:
sed -f '/str/d' filename
1.將文件中的前 100 數據 , 搬到文件中第 300 後輸出。其命令以下:
sed -f mov.txt targetfile ## targetfile是要操做的文件,mov.txt裏面放的是操做指令
其中mov.txt文檔的內容爲:
1,100{ H d } 300G
2.將from.txt文件中含 "phi" 字符串的數據行 , 移動到to.txt文件中儲存。其命令以下:
sed -e '/phi/w to.txt' from.txt
3.將 from.txt文件內容 , 移動至to.txt文件中含 "beta" 字符串的數據行。其命令以下:
sed -e '/beta/r from.txt' to.txt
1.將文件中含 "omega" 字符串的數據輸出:
sed -f grep.txt targetfile
其中grep.txt的內容以下:
/omega/b N h s/.*\n// /omega/b g D