Shell腳本語言(第一篇)

第一點:Shell介紹?
    Android開發:動態庫編譯(.so文件)
    iOS開發:靜態庫(.a文件) 
    Shell編譯
    掌握基本Shell使用->修改和應用Shell
第二點:什么是Shell?
    腳本語言->編譯庫(應用技術)

第三點:Shell環境?
    Mac環境支持Shell開發
    Shell中類非常多
        Bash所有的操作系統默認腳本語言(免費、易用)
        種類:bash、c Shell、K Shell等等...            

第四點:進入Shell語言基礎學習?
    1、第一個Shell程序?
        1.1 創建Shell文件
            命令:touch hello.sh
        1.2 編寫Shell程序
            定義文件聲明
            #!/bin/bash
            echo "Hello world!" 

            #!:表示約定標記,他會告訴系統這個腳本需要什么樣子的解釋器來執行,既是一種腳本體現。
            echo:表示命令用于輸出文本信息   

        1.3 修改文件權限
            1.3.1 權限結構
                分為了4個部分(QQ群為例)
                第一部分:文件類型->QQ群類型
                第二部分:文件所有者->群主
                第三部分:所有者同組用戶->管理員
                第四部分:其他用戶->群成員  

            1.3.2 查看每一個部分權限
                查看文件權限      
                命令:ls -l hello.sh
                    -rw-r—r--
            1.3.3 修改文件權限
                命令: chmod +x ./hello.sh
                    -rwxr-xr-x

        1.4 執行Shell腳本文件
            命令:./hello.sh

    2、Shell腳本語法->注釋?
        ”#“->表示注視
        例如:
            腳本代碼
                #!/bin/bash
                # 輸出了Hello world!
                echo "Hello world!"
        注意:在Shell腳本中,沒有多行注視,只有單行注釋

    3、Shell腳本語言->變量
        3.1 變量定義->注意事項
            注意一:定義變量時候,變量名出不需要加"$"符號
            注意二:變量名和等號不能夠有空格(和我們的一般語言不一樣)
            注意三:變量名首字母必需是字母+下劃線(a-z、A-Z)
            注意四:變量名中間不允許有空格 
            注意五:不允許使用標點符號
            …細節
        3.2 只讀變量
            關鍵字:readonly(只讀,不能夠修改)
            腳本代碼
                name="HelloApp"
                readonly name
                #./hello.sh: line 35: name: readonly variable
                name="smile2017"
                echo "執行了"

        3.3 刪除變量?
            語法:unset(干掉了)
            案例:unset 變量名

        3.4 變量類型
            3.4.1 類型一:本地變量
                作用域整個bash進程可以使用
                語法:name="Dream"
            3.4.2 類型二:局部變量
                作用域:當前代碼段(修飾符:local)
                local name="Andy"
            3.4.3 類型三:環境變量
                作用域:當前shell進程以及子進程
                語法:export name="Dream"
            3.4.4 類型四:位置變量
                腳本代碼
                    #!/bin/bash
                    name=${0}
                    age=${1}
                    sex=${2}
                    echo "姓名:${name}   年齡:${age}  性別:${sex} "
                執行腳本
                    ./hello.sh Jeff 150 男
                執行結果        
                    ${0}表示腳本文件名稱
                    參數從1開始
            3.4.5 特殊變量
                3.4.5.1 ${0}->特殊變量->文件名稱
                3.4.5.2 ${?}->表示返回上一個命令執行狀態返回值
                    0:表示執行成功
                    1:程序執行結果
                    2:表示程序狀態返回碼(0-255)
                        系統預留錯誤(1、2、127)
                    案例測試
                        #!/bin/bash
                        echo ${0}
                        echo ${?}
                
                3.4.5.3 $#->參數個數

                3.4.5.4 $*->參數列表

                3.4.5.5 $@->參數列表

                3.4.5.6 $$->后去當前shell進行ID

                3.4.5.7 $!->執行上一個指令PID

                3.4.5.8 ${*}和${@}區別?
                    腳本代碼
                        #!/bin/bash
                        echo ${*}
                        echo ${@}
                    執行腳本
                        ./hello.sh Andy 200 男 
                    腳本結果
                        ${*}->參數列表:將所有的參數組成一個字符串->"Andy 200 男"
                        ${@}->參數列表:分開的->"Andy" 200 "男"
        
    4、Shell腳本語言->字符串?
        4.1 字符串->單引號
            腳本代碼
                #!/bin/bash
                name='Andy'
                echo ${name}
                        
            
            腳本結果:Andy
        
        4.2 字符串->雙引號
            腳本代碼
                #!/bin/bash
                name="Andy"
                echo ${name}
                        
            
            腳本結果:Andy
        
        4.3 字符串->拼接
            方式一:
                腳本代碼
                    #!/bin/bash
                    name="Andy"
                    age=100
                    sex="男"
                    info="${name} ${age} ${sex}"
                    echo ${info}
                        
            
                腳本結果:"Andy 100 男"
            方式二
                腳本代碼
                    #!/bin/bash
                    name="Andy"
                    age=100
                    sex="男"
                    info=" 姓名:"${name}"   年齡:"${age}"  性別:"${sex}"  "
                    echo ${info}
                        
            
                腳本結果:"姓名:Andy 年齡:100 性別:男"

        4.4 字符串->獲取字符串長度
            語法結構:${#變量名}
            腳本代碼
                #!/bin/bash
                name="Andy"
                echo ${#name}
            腳本結果:4

        4.5 字符串->截取
            語法:${變量名:開始位置:截取長度}
            腳本代碼
                    #!/bin/bash
                    name="I have a Dream"
            案例一:從字符串第3個開始截取,截取3個
                name="I have a Dream"
                result=${name:2:3}
                echo ${result}
            案例二:從字符串第5個開始截取,到最后一個結束
                方式一
                    name="I have a Dream"
                    length=${#name}
                    result=${name:5:length-1}
                    echo ${result}
                方式二
                    name="I have a Dream"
                    result=${name:5}
                    echo ${result}
        4.6 字符串->刪除
            語法一:${變量名#刪除字符串 正則表達式}
                作用:從字符串開頭(左邊)開始匹配要刪除字符串
                案例一:
                    name="I have a Dream"
                    result=${name#Dream}
                    echo ${result}
                    原因:匹配不到
                案例二:            
                    name="I have a Dream"
                    result=${name#I}
                    echo ${result}
                案例三:查找指定字符第一個,并且刪除前面所有的字符(包含自己)
                    name="I have a Dream"
                    result=${name#*D}
                    echo ${result}

                案例四:指定刪除范圍
                    name="I have a Dream"
                    result=${name#h*D}
                    echo ${result}

            語法二:${變量名##刪除字符串 正則表達式}
                作用:從字符串結尾(右邊)開始匹配要刪除字符串
                案例一
                    name="I have a Dream"
                    result=${name##*a}
                    echo ${result}
                總結:語法一和語法二,都是從左邊刪除到右邊,查找方向不一樣

            語法三:${變量名%刪除字符串 正則表達式}
                從字符串結尾開始匹配,刪除匹配的字符串
                案例一:查找第一個字符(匹配第一個)
                    代碼一:
                        name="I have a Dream"
                        result=${name%a}
                        echo ${result}
                    代碼二:
                        name="I have a Dream"
                        result=${name%m}
                        echo ${result}

                案例二:查找指定字符第一個,并且刪除前面所有字符(包含自己)
                    name="I have a Dream"
                    result=${name%h*}
                    echo ${result}

                案例三:指定刪除范圍
                    name="I have a Dream"
                    result=${name%a*D}
                    echo ${result}

            語法四:${變量名%%刪除字符串 正則表達式}
                案例一:查找指定字符最后一個,并且刪除前面所有的字符(包含自己)
                    name="I have a Dream"
                    result=${name%%a*}
                    echo ${result}

            總結:
                從左邊刪除到右邊
                    #->表示查詢方向從左到右
                    ##->表示查詢方向從右到左
                從右邊刪除到左邊
                    %->表示查詢方向從右到左
                    %%->表示查詢方向從左到右
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。