#
注釋
;
命令分割符,可以將多個語句放在一行執行
‘’(單引號)
強引用,在單引號中無法引用變量
" "(雙引號)
類似於’’,但支持變量替換
` `(反引號.為tab鍵上方按鍵)
用於引用命令的執行結果
命名規則:以字母開頭,可以使用數字字母
變量定義:declare varName
變量賦值:varName=值
變量值引用: $varName
導出變量: export varName[=value]
撤銷變量: unset varName
特殊變量:
$?:返回上一條命令的狀態返回值
$1,$2...:位置變量
$#:腳本傳入的所有參數個數
$*,$@:返回腳本傳入的所有參數
使用格式:
test EXPR
[ EXPR ]
[[ EXPR ]]
文件測試
字符測試
整數測試
-a|-e FILE:是否存在
-S FILE:套接字文件
> :大於
-gt:大於
-f FILE:普通文件
-p FILE:命名管道文件
<:小於
-ge:大於等於
-d FILE:目錄
-s FILE:是否為空文件
<=:小於等於
-eq:等於
-L FILE:符號鏈接文件
-r FILE:是否可讀
>=:大於等於
-le:小於等於
-b FILE:塊設備文件
-w FILE:是否各寫
==:等於
-lt:小於
-c FILE:字符設備文件
-x FILE:是否可執行
!=:不等於
-ne:不等於
FILE1 -nt FILE2 :FILE1的mtime是否新與FILE2
-n String :是否不空
FILE1 -ot FILE2 :FILE1的mtime是否舊與FILE2
-z String:是否為空
標准輸入:0 默認設備為鍵盤
標准輸出:1 默認設備為顯示器
標准錯誤輸出:2 默認設備為顯示器
>::覆蓋輸出 &>錯誤覆蓋輸出
>> :追加輸出 &>>錯誤覆蓋輸出
&>:合並重定向
<:輸入重定向
<<:此處文檔
tee:分流,將結果輸出到屏幕並重定向
第一行頂格"#!/path/to/a/shell"
條件判斷
語法格式
示例
單分支if語句
if 語句1;then
語句1執行結果為真則執行
else
語句1執行結果為假則執行
fi
1 2 3 4 5 6 7 8
#!/bin/bash
a=1
b=1
if
[ $a -
eq
$b ];
then
echo
"yes"
else
echo
"no"
fi
多分支if語句
if 語句1;then
語句1執行結果為真則執行
elif 語句2;then
語句2執行結果為真則執行
...
else
所有條件都不滿足時執行
fi
1 2 3 4 5 6 7 8 9 10
#!/bin/bash
a=1
b=2
if
[ $a -gt $b ];
then
echo
"a>b"
elif
[ $a -lt $b ];
then
echo
"a<b"
else
echo
"a=b"
fi
循環結構
for varName in LIST;do
循環體
done
1 2 3 4#!/bin/bash
for
i
in
{1..10};
do
echo
$i
done
for ((var=#;測試條件;修正條件));do
循環體
done
1 2 3 4#!/bin/bash
for
((i=1;i<=10;i++));
do
echo
$i
done
while 條件語句;do #條件為真時進入循環
循環體
done
1 2 3 4 5#!/bin/bash
while
!
who
|
grep
“^gentoo”;
do
echo
“gentoo is not login”
sleep
3
done
until 條件語句;do
循環體
done
1 2 3 4 5#!/bin/bash
while
who
|
grep
“^gentoo”;
do
echo
“gentoo is not login”
sleep
3
done
條件選擇
case $varName in
exp1)
語句體1 ;;
exp2)
語句體 2 ;;
...
*)
語句體 n ;;
1 2 3 4 5 6 7 8 9 10#!/bin/bash
tmp=y
case
$tmp
in
y|
yes
)
echo
yes
;;
n|no)
echo
no ;;
*)
echo
“unknown”
esac
函數聲明方式
1 2 3 4 5 6 7function
函數名{
函數體
}
函數名() {
函數體
}
函數使用方式
函數名 [參數....]
參數可以在函數體中用位置變量引用
循環條件控制
continue:提前進入下一輪循環
break #: #默認為1,跳出#層循環
Linux Shell參數替換 http://www.linuxidc.com/Linux/2013-06/85356.htm
Shell for參數 http://www.linuxidc.com/Linux/2013-07/87335.htm
Linux/Unix Shell 參數傳遞到SQL腳本 http://www.linuxidc.com/Linux/2013-03/80568.htm
Shell腳本中參數傳遞方法介紹 http://www.linuxidc.com/Linux/2012-08/69155.htm
Shell腳本傳遞命令行參數 http://www.linuxidc.com/Linux/2012-01/52192.htm