編寫shell腳本步驟
1、創建腳本
touch/vim 文件名.sh //必須以sh結尾
2、編寫代碼
#!/bin/bash //第一行指定shell解釋器,第二行開始寫腳本
3、添加文件可執行權限
chmod +x 文件名
4、執行腳本:
①/bin/bash 文件
②./文件
註釋:#
案例:輸出Hello World!
shell基礎
變量的定義和使用
輸入/輸出
流程控制
函數
運算符
文件包含
-
變量的定義和使用
定義變量 (變量名=值)
例如:str="value"
使用變量
①變量名前+'$'
例如:echo $str
②變量後緊跟字符時使用${str}
例如:echo "str的值爲${str}."
變量命名規範
①變量名等號左右不能有空格(不同於其他編程語言)
②命名只能使用英文字母、數字、下劃線,首字母不能以數字開頭,中間不能有空格
③不能使用bash保留關鍵詞(通過help查看保留關鍵字)
只讀變量
語法:readonly 變量名
位置變量(shell腳本附帶選項)
傳遞:./test.sh a b c
接收:$+選項對應的序號(傳遞的參數從左到右,從0開始)
即$0表示./test,$1表示a,$2表示b,$3表示c
其他位置變量
$*:包含參數列表
$@:包含參數列表
$#:包含參數個數
刪除變量
語法:unset 變量名
定義字符串
str='Hellow World'
獲取字符串長度
語法:$[#str]
截取字符串
語法:$[str:0:5]
BASH引號規則
雙引號:能夠識別變量以及實現轉義
單引號:阻止shell對所有字符進行解釋
倒引號:倒引號括起一個shell指令時,這個指令會被執行,執行的結果作爲這個表達式的值。(esc下方的按鍵"`")
定義數組
①array_name=(value1 value2 ... valuen)
②使用下標定義數組
array_name[0]=value1
array_name[1]=value2
...
array_name[n-1]=valuen
讀取數組
語法:${array_name[index]}
獲取數組所有元素
array_name[@]或array_name[*]
-
輸入/輸出
接收用戶輸入
語法:read -p 提示信息 變量名
輸出
①echo [arguments] //將參數傳遞給標準輸出,最後自動加上一個換行符。
②printf format-string [arguments] //將參數按指定格式輸出
-
流程控制
條件測試
if語句
①單個條件if結構
if [ condition ]
then
command
fi
②多個條件if結構
if [ condition1 ]
then
command1;
elif [ condition2 ]
then
command2;
...
else
commandN;
fi
case語句
case word in
pattern1)
command1
;;
pattern2)
command2
;;
...
patternN)
commandN
;;
*) //*表示匹配所有字符串
command
;;
esac
test指令
語法:test expr
作用:判斷表達式expr是否爲真,如果是返回true,否則返回false
"["指令
語法:[ expr ]
作用:與test指令一樣。expr左右必須有空格
循環結構
while語句
語法(條件爲真時執行)
while test-condition
do
command
done
until語句
語法 (條件爲假時執行)
until test-condition
do
command
done
for語句
語法
for variable [in list]
do
command
done
break語句:跳出所有循環
continue語句:跳出當前循環
-
函數
定義格式
[function] funcname[()]
{
command;
[return int]
}
說明:
①可以帶function funcname()定義,也可以直接funcname()定義
②return可加可不加,後跟數值(0~255)
-
運算符
算術運算符:"+"、"-"、"*"、"/"、"%"、"-"
位運算符:"&"、"|"、"!"、"^"、"~"、"<<"、">>"
語法(以+爲例):
①num=`expr 1 + 1`
②num=$[ 1 + 1 ]
③let num=1+1
$[]可以接受不同基數的數,默認爲10進制,使用[base#]n來表示二到三十六進制任何一個n值
關係運算符(數字)
①條件操作符:"=="、"!="、">"、"<"、">="、"<="
②test指令內建操作符
-eq:判斷兩個數是否相等,相等返回true
-ne:判斷兩個數是否相等,不相等返回true
-gt:判斷左邊的數是否大於右邊的數,如果是,返回true
-lt:判斷左邊的數是否小於右邊的數,如果是,返回true
-ge:判斷左邊的數是否大於等於右邊的數,如果是,返回true
-le:判斷左邊的數是否小於等於右邊的數,如果是,返回true
邏輯運算符
①條件操作符:"&&"、"||"
②test指令內建操作符
!:非運算符
-o:或運算符
-a:與運算符
注意:這裏條件操作符連接的是兩條test(或"[")指令,而test指令內建操作符是在同一條test(或"[")指令中使用
賦值運算符:"="、"+="、"-="、"*="、"/="、"%="、"&="、"^="、"|="、"<<="、">>="
字符串運算符
=:判斷兩個字符串是否相等,相等返回true
!=:判斷兩個字符串是否相等,不相等返回true
-z:判斷字符串長度是否爲0,爲0返回true
-n:判斷字符串長度是否爲0,不爲0返回true
str:判斷字符串str是否爲空,不爲空返回true
文件測試運算符
-b file:判斷文件是否是塊設備文件,如果是,返回true
-c file:判斷文件是否是字符設備文件,如果是,返回true
-d file:判斷文件是否是目錄,如果是,返回true
-f file:判斷文件是否是普通文件(既不是目錄,也不是設備文件),如果是,返回true
-q file:判斷文件是否設置了SGID位,如果是,返回true
-k file:判斷文件是否設置了粘着位(Sticky Bit),如果是,返回true
-p file:判斷文件是否有名管道,如果是,返回true
-u file:判斷文件是否設置了SUID位,如果是,返回true
-r file:判斷文件是否可讀,如果是,返回true
-w file:判斷文件是否可寫,如果是,返回true
-x file:判斷文件是否可執行,如果是,返回true
-s file:判斷文件是否爲空(文件大小是否大於0),不爲空返回true
-e file:判斷文件是否存在,如果是返回true
-
文件包含
語法
. 文件名(.後面跟一個空格)
設置別名:修改~/.bashrc文件,一行存一個別名
語法:alias 別名=文檔路徑