1,獲取命令執行的結果,字串拼接(指令碼最常使用的功能)
cmd_result=$(date +%Y%b%d) //使用變數獲取命令執行的結果 或者 cmd_result=`date +%Y%b%d` 反引號
mysqldump -uroot -pfeng --all jiale>/root/jiale$cmd_result.sql //執行字串和變數拼接,也可以使用${cmd_result}
2.使用#來註釋,以及指令碼執行的方法
指令碼的開頭一般是
#!/bin/sh
因為指令碼前兩個字元一般是#!,系統會將這兩個字元之後的字元作為執行指令碼的命令直譯器的絕對路徑(也可以是其他指令碼直譯器的路徑)
指令碼執行的三個方法
(1)chmod u+x 指令碼名 //給指令碼執行權
./指令碼名
(2)bash 指令碼名 //直接使用shell啟動命令一般比上面的方法要慢一些
sh 指令碼名
(3)使用bash內部命令source或“.”執行指令碼
source 指令碼名
. 指令碼名 //“.”之後必須有一個空格
3,I/O重定向,管道(|)和後臺執行
cmd1 > file1 | 將命令1 的結果輸入到檔案1中 |
cmd1 > >file1 | 將命令1 的結果追加到檔案1中 |
cmd1 < file1 | 將檔案1 的內容輸出作為 命令 1執行 |
cmd1 << file1 | 將檔案1 的內容追加到 命令 1 |
cmd1 2> file1 | 錯誤輸出重定向,命令1執行的錯誤資訊會輸入給檔案1 |
cmd1 &> file1 | 標準輸出與錯誤輸出重定向,標準輸出和錯誤輸出一起輸入到檔案1中,螢幕將無顯示 |
命令1 |命令2|命令1
將命令1的結果,輸出給命令2,作為命令2的輸入,再將命令2的結果輸出給命令3,作為命令3的輸入
命令1 |&命令2|命令1
將命令1的標準結果和標準錯誤資訊,輸出給命令2,作為命令2的輸入,再將命令2的結果輸出給命令3,作為命令3的輸入
在命令後加入&,可以讓命令到後臺執行
COMMAND &
# gcc myproc.c&
4,命令執行順序
分號,多個命令用分號隔開,最後一個回車後,命令按順序執行
&& 連線連個命令,第一個命令執行成功後才能執行第二個命令
|| 連線連個命令,第一個命令執行失敗後才能執行第二個命令
5,shell萬用字元
? 表示任意單個字元
* 表示任意長度字元
[ ] 表示匹配[ ]給定字符集合的任意一個字元
{ } 表示將{ }中的字串,以及前導和後繼字元作為匹配條件
6,單引號,雙引號,反引號
單引號 括起來的字元都會變成普通字串
雙引號 括起來的字元除 $ " ` \ 外都會變成普通字串
反引號 括起來的字串會被作為命令執行
declare [-afirx] 宣告變數型別
-a 定義為陣列
-f 定義為函式
-i 定義為整數
-r 定義為只讀
-x 定義為通過環境輸出比變數
declare -i plaus=1+2+4*4-5
echo plaus
test命令(如果不想使用tset可以使用“[ 表示式 ]”來代替,表示式前後有空格)
test -e file 測試檔案是否存在,存在為真
test -d file 測試檔案是否存在且是目錄,是則為真
test -x file 測試檔案是否存在且可以執行,是則為真
test -r file 測試檔案是否存在且為只讀,是則為真
test -w file 測試檔案是否存在且可寫入,是則為真
test -b file 測試檔案是否存在且為塊裝置,是則為真
test -c file 測試檔案是否存在且為字元裝置,是則為真
test -s file 測試檔案是否存在且長度大於0,是則為真
test -f file 測試檔案是否存在且是普通檔案,是則為真
數值比較測試
-eq 等於
-ne 不等於
-gt 大於
-lt 小於
-ge 大於等於
-le 小於等於
字串比較測試
-z s1 如果字串s1的長度是0,值為真
-n s2 如果字串s1的長度不為0,值為真
s1=s2 相等值為真
s1!=s2 不相等值為真
s1 如果字串s1不是空串,值為真
控制結構
if then else fi
echo "press y to continue"
read yn
if [ "$yn"="y" ] || [ "$yn"="Y"]; then echo "script is running"
else
echo "Stop"
fi
case ......esac
echo "press you select "
read number
case $number in //如果沒有read 互動式輸入 ,直接輸入使用$1 即 (case $1 in )
one) echo "you choice is one"
;;
tw0) echo "you choice is two"
;;
*) echo "Usage {one|two}"
exit 1
esac
for (( 條件1;條件2;條件3))
for var in var1 var2 var3
while[ 條件1 ] && { || } [ 條件2 ] 當條件符合時就繼續
until [ 條件1 ] && { || } [ 條件2 ] 直到條件符合時才繼續
函式
函式名() {
}
指令碼除錯
sh [-nvx] script.sh
-n 不執行指令碼,查詢指令碼內容語法,錯誤則列出 sh -n script.sh
-v 執行指令碼之前先把指令碼內容顯示在螢幕上
-x 將用到的指令碼內容顯示在螢幕上