Shell編程

編寫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 別名=文檔路徑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章