<rp id="jfnnt"><em id="jfnnt"><form id="jfnnt"></form></em></rp><video id="jfnnt"></video>

<big id="jfnnt"><dl id="jfnnt"><video id="jfnnt"></video></dl></big>
<nobr id="jfnnt"><pre id="jfnnt"></pre></nobr>
<track id="jfnnt"></track>

        <nobr id="jfnnt"></nobr>

        <big id="jfnnt"></big>

            很快微信開發者平臺

             找回密碼
             注冊
            查看: 710|回復: 0
            打印 上一主題 下一主題

            sh腳本命令

            [復制鏈接]

            5

            主題

            5

            帖子

            293

            積分

            新人求帶

            積分
            293
            跳轉到指定樓層
            樓主
            發表于 2021-5-15 14:38:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
            cremeb多商戶打包代碼的時候,總是重復的工作,就想著寫了個腳本,記錄一下sh腳本用到的一下方法:
            點擊了解 [CRMEB多商戶](http://github.crmeb.net/u/meng) 其他開源項目源碼下 :[了解更多](http://github.crmeb.net/u/lanlan)
            小姐姐二維碼
            ![在這里插入圖片描述]()
            1. `#!/bin/bash` 文件第一行,提示電腦后面的代碼需要用 /bin/bash 來解讀
            2. `echo` 輸出內容,
            3. `param=$(cat ./test.txt)` 變量賦值,參數名\等號\值,三個之間不能有空格,如果需要得到某夠命令獲取的信息作為值,都可以用這種方式,變量=$(命令);
            4. 變量賦值單引號與雙引號的區別,單引號不會轉義內容,雙引號會轉義內容;
            5. 變量的使用 ` $param`或者` ${param}`即可使用;
            6. 獲取用戶輸入值
            ```shell
                    echo "請輸入你想要輸入的值"
                    read inputValue
                    echo $inputValue                 #這里打印出來的就是用戶輸入的值
                    param=$inputValue        #這里將用戶輸入的值賦給了param
                    echo $param                                 #這里打印出來的也是用戶輸入的值
            ```
            ![在這里插入圖片描述]()
            7.  sh 下標傳入參數 `sh ./test.sh a b  `
            ```shell
            #!/bin/bash
            echo $0 # test 執行的文件名
            echo $1 #a 第一個參數
            echo $2 #b 第二個參數 可以繼續寫
            echo $# #2         傳遞到腳本的參數個數
            echo $* #a b 以一個單字符串顯示所有向腳本傳遞的參數
            echo $$ # 當前的進程號
            echo $! #d 后臺運行的最后一個進程號
            ..
            ```
            ![在這里插入圖片描述](?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjY3MzQ0OA==,size_16,color_FFFFFF,t_70)
            8. `getopts`  sh腳本傳參數方法,如:`test.sh -a 1`
            創建腳本 test.sh
            ```shell
            #!/bin/bash
            while getopts "a:w:p:n" arg; #這里設定了參數必須是-a;-w;-p;-n這幾個參數名,后面的冒號表示必須傳入參數
            do
                    case $arg in
                            a ) #所有版本號統一
                                    parms1="$OPTARG"
                            ;;
                            w ) #前端版本號
                                    parms2="$OPTARG"
                            ;;
                            p ) #php版本號
                                    parms3="$OPTARG"
                            ;;
                            n ) #最新版本號
                                    parms4=1
                            ;;
                            ? )
                            echo "未知參數: -a; -w ; -p ; -n "
                            exit
                    esac
            done
            ```
            例如執行 `sh ./test.sh -a 1` 可以選擇參數名-a 就必須傳入參數 1,-n則可以不用參數;
            ![在這里插入圖片描述]()
            9. 字符串的操作
            ```shell
            param='abcd_';
            param1="$param"'efgh' #拼接字符串,直接跟著寫即可
            echo $param1                  #abcd_efgh
            echo ${#param1}          #計算字符串長度 輸出 9
            echo ${param1:1:4}          #截取字符串 從1號下標開始到4號結束 輸出 bcd_ 都知道下標從0開始的吧
            echo ${param1#abcd_} #從左相右匹配截取剩下的字符串,注意必須從頭開始算,也就是說不能寫個d_開始匹配, 輸出efgh
            echo ${param1#*_}          #從左相右匹配截取剩下的字符串*代表任意,類似 .* 輸出efgh
            echo ${param1%gh}          #從右向左匹配截取剩下的字符串,注意必須從末尾開始算,也就是說不能寫個_e開始匹配, 輸出 abcd_ef
            echo ${param1%_*}          #從右向左匹配截取剩下的字符串*代表任意,類似 .* 輸出abcd_ef
            echo ${param1:0-4}          #從右向左匹配2個,截取 輸入 efgh
            echo ${param1:0-4:2} #從右向左截取4個,然后在從這4個中,從左向右截取2個 輸出 gh
            ```
            10. 數組
            ```shell
            array=(a b c d) #數組的定義
            echo ${array
          1. } 或 echo ${array[@]} #輸出數組全部值 a b c d
          2. echo ${array[0} # a 下標式輸出
            ```
            11. 數字的運算,必須用 “`”這個符號包起來,這不是單引號,是反引號
            ```shell
            echo `expr 1 + 1 `  #加
            echo `expr 2 - 1 `  #減
            echo `expr 2 \* 2` #乘
            echo `expr 4 / 2 ` #除
            echo `expr 5 % 2 ` #取余數
            let a=1+1
            let b=2-1
            echo $a $b  # let 定義一個或多個表達式
            ```
            12. `if`流程控制
            ```shell
            if [  ] ;#條件,注意空格
            then          #執行
            elif        #條件
            then        #執行
            else         #否
            fi                 #結束標簽
            !         # 非 if [ $a !$b ]
            -a         #and 與   if [ $a -a $b ]
            -o         #or 或  if [ $a -o $b ]
            &&     # AND
            ||         # OR
            數字的比較
            -eq        #檢測兩個數是否相等
            -ne        #檢測兩個數是否不相等
            -gt        #檢測左邊的數是否大于右邊的
            -lt        #檢測左邊的數是否小于右邊的
            -ge        #檢測左邊的數是否大于等于右邊的
            -le        #檢測左邊的數是否小于等于右邊的
            字符串的比較
            =        檢測兩個字符串是否相等
            !=        檢測兩個字符串是否不相等
            -z        檢測字符串長度是否為0
            -n        檢測字符串長度是否不為 0
            $        檢測字符串是否為空
            文件夾比較
            -e 判斷對象是否存在
            -d 判斷對象是否存在,并且為目錄
            -f 判斷對象是否存在,并且為常規文件
            -L 判斷對象是否存在,并且為符號鏈接
            -h 判斷對象是否存在,并且為軟鏈接
            -s 判斷對象是否存在,并且長度不為0
            -r 判斷對象是否存在,并且可讀
            -w 判斷對象是否存在,并且可寫
            -x 判斷對象是否存在,并且可執行
            -O 判斷對象是否存在,并且屬于當前用戶
            -G 判斷對象是否存在,并且屬于當前用戶組
            -nt 判斷file1是否比file2新  [ "/usr/test1.txt" -nt "/usr/test2.txt" ]
            -ot 判斷file1是否比file2舊  [ "/usr/test1.txt" -ot "/usr/test2.txt" ]
            ```
            13.  for 循環
            ```shell
            param=(1 2 3 4 5 6 7 8)
            for i in ${param
          3. } # 這個in后面的要是輸出的形式展示
          4. do
                    echo $i # 1 2 3 4 5 6 7 8
            done
            ```
            14. while 循環
            ```shell
            i=1
            while(( $i<7 )) #當這個條件成功,則不在執行
            do
                    echo $i
                    let "i++"  # 1 2 3 4 5 6
            done
            ```
            15.  `break` 跳出循環整個循環體都不在執行,`continue `跳過本次循環繼續下一個循環,`exit` 結束腳本;
            16. 函數方法
            ```shell
            #定義函數
            function name(){
                    return 1
            }
            name(){}
            name 1 2 #函數調用,(1,2)是傳入的參數
            param=$? #獲取函數renturn回來的值
            echo $param #2 函數返回的值
            ```
            ##### 暫時就用到這些

            回復

            使用道具 舉報

            您需要登錄后才可以回帖 登錄 | 注冊

            本版積分規則

            QQ|Archiver|手機版|小黑屋|很快微信開發者平臺 ( 京ICP備2021022608號 )

            GMT+8, 2021-10-21 02:01 , Processed in 0.026018 second(s), 18 queries .

            Powered by Discuz! X3.4

            Copyright © 2001-2020, Tencent Cloud.

            快速回復 返回頂部 返回列表
            高潮白浆潮喷正在播放

            <rp id="jfnnt"><em id="jfnnt"><form id="jfnnt"></form></em></rp><video id="jfnnt"></video>

            <big id="jfnnt"><dl id="jfnnt"><video id="jfnnt"></video></dl></big>
            <nobr id="jfnnt"><pre id="jfnnt"></pre></nobr>
            <track id="jfnnt"></track>

                  <nobr id="jfnnt"></nobr>

                  <big id="jfnnt"></big>