<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux的Shell編程語法集錦

          共 6053字,需瀏覽 13分鐘

           ·

          2021-08-06 12:08

          【GiantPandaCV導(dǎo)語】相信在linux服務(wù)器環(huán)境下完成算法開發(fā)和部署的同學(xué),都有使用shell來實現(xiàn)部分自動化功能的經(jīng)歷,本文就來給大家分享我總結(jié)的一些shell語法知識,希望對大家有幫助。

          一、shell文件運行

          寫好的文件保存為*.sh 文件加好運行權(quán)限后,就是可以用Bash運行的腳本程序了

          chmod +x yourshell.sh
          ./yourshell.sh

          二、shell 變量

          命名格式 A=B 或用循環(huán)等語句給變量賦值

          注意:變量名和等號之間不能有空格

          使用時:echo $A或 echo ${A},花括號用來確認變量范圍(可選)
          只讀變量:A=B readonly A
          刪除變量:unset A

          變量類型:

          1)局部變量  僅當前shell實例中有效

          2)環(huán)境變量  全局的變量,比如用export聲明的,或者在bashrc文件里或者/etc/profile文件里的

          3)shell變量  由shell程序設(shè)置的特殊變量

          shell 字符串

          A='B' 或 A="B"

          注意:單引號中的變量是無效的,雙引號中的可使用轉(zhuǎn)義字符

          字符串拼接 A=B C="D,""

          {A}"


          獲取字符串長度 A=B echo ${#A}

          提取子串 A=B echo ${A:1:4}

          查找子串 A=B  此處的是反引號不是單引號 echo expr index "$A"

          shell 數(shù)組

          bash僅支持一維數(shù)組 A=(B C D E F)  或A[0]=B A[1]=E A[3]=F 可以不使用連續(xù)下標 讀取  {A[@]} 表示獲取所有元素

          shell 傳遞參數(shù)

          • $0 腳本名
          • 9 輸入腳本的參數(shù),第一個、第二個以此類推
          • $@ 所有的參數(shù)
          • $# 參數(shù)數(shù)量
          • $?返回上一條指令的代碼
          • $_最后一條指令的最后一個參數(shù)

          三、shell 基礎(chǔ)運算符

          算數(shù)運算符shell原生不支持數(shù)學(xué)計算,可通過awk或expr實現(xiàn),或者使用(()),在內(nèi)層小括號內(nèi),使用C的語法實現(xiàn)。使用expr時,`為反引號而不是單引號

          val=`expr 2 + 2`

          注意:表達式和運算符之間必須有空格,條件表達式要放在方括號內(nèi),例如[b],乘號前必須加反斜杠

          關(guān)系運算符

          注意:只支持數(shù)字,不支持字符串,除非字符串的值是數(shù)字
          -eq  是否相等
          -ne  是否不相等
          -gt  左邊是否大于右邊
          -lt   左邊是否小于右邊
          -ge 左邊是否大于等于右邊 
          -le  左邊是否小于等于右邊

          布爾運算符

          ! 非
          -o 或
          -a 與

          邏輯運算符

          && 邏輯的AND
          || 邏輯的OR

          字符運算符

          = 相等
          != 不相等
          -z 長度為0
          -n 不為0長度
          $  是否為空

          文件測試運算符

          文件測試運算符用于檢測 Unix 文件的各種屬性。
          -b file 檢測文件是否是塊設(shè)備文件,如果是,則返回 true。   [ -b $file ] 返回 false。
          -c file 檢測文件是否是字符設(shè)備文件,如果是,則返回 true。 [ -c $file ] 返回 false。
          -d file 檢測文件是否是目錄,如果是,則返回 true。         [ -d $file ] 返回 false。
          -f file 檢測文件是否是普通文件(既不是目錄,也不是設(shè)備文件),如果是,則返回 true。 [ -f $file ] 返回 true
          -g file 檢測文件是否設(shè)置了 SGID 位,如果是,則返回 true。 [ -g $file ] 返回 false。
          -k file 檢測文件是否設(shè)置了粘著位(Sticky Bit),如果是,則返回 true。 [ -k $file ] 返回 false。
          -p file 檢測文件是否是有名管道,如果是,則返回 true。     [ -p $file ] 返回 false。
          -u file 檢測文件是否設(shè)置了 SUID 位,如果是,則返回 true。 [ -u $file ] 返回 false。
          -r file 檢測文件是否可讀,如果是,則返回 true。           [ -r $file ] 返回 true
          -w file 檢測文件是否可寫,如果是,則返回 true。           [ -w $file ] 返回 true。
          -x file 檢測文件是否可執(zhí)行,如果是,則返回 true。         [ -x $file ] 返回 true。
          -s file 檢測文件是否為空(文件大小是否大于0),不為空返回 true。 [ -s $file ] 返回 true
          -e file 檢測文件(包括目錄)是否存在,如果是,則返回 true。 [ -e $file ] 返回 true。

          四、shell echo

          read name 類似python的input函數(shù),可以用來獲取輸入值echo -e "ok! \n" -e 開啟轉(zhuǎn)義\c 不換行\(zhòng)n 換行

          五、shell printf

          語法printf format-string [arguments...]舉例:printf "test\n"

          六、shell test

          用于檢查某個條件是否成立,可進行數(shù)值、字符和文件三方面的測試數(shù)值測試-eq 等于則為真-ne 不等于則為真-gt 大于則為真-ge 大于等于則為真-lt 小于則為真-le 小于等于則為真num1=100num2=100if test $[num1] -eq $[num2]then    echo '兩個數(shù)相等!'else    echo '兩個數(shù)不相等!'fi代碼內(nèi)的[]中可進行基本的數(shù)值運算字符串測試= 等于則為真!= 不相等則為真-z 字符串 字符串的長度為零則為真-n 字符串 字符串的長度不為零則為真num1="alasijia"num2="alasi1jia"if test $num1 = $num2then    echo '兩個字符串相等!'else    echo '兩個字符串不相等!'fi文件測試-e 文件名 如果文件存在則為真-r 文件名 如果文件存在且可讀則為真-w 文件名 如果文件存在且可寫則為真-x 文件名 如果文件存在且可執(zhí)行則為真-s 文件名 如果文件存在且至少有一個字符則為真-d 文件名 如果文件存在且為目錄則為真-f 文件名 如果文件存在且為普通文件則為真-c 文件名 如果文件存在且為字符型特殊文件則為真-b 文件名 如果文件存在且為塊特殊文件則為真cd /binif test -e ./bashthen    echo '文件已存在!'else    echo '文件不存在!'fi

          七、shell 流程控制

          if conditionthen   commandelsefiif conditionthen    commandelif condition2then   commandelse   commandfifor var in item1 item2do   commanddonewhile conditiondo   command done

          八、函數(shù)

          [function] funname[()]{  action;  [return int;]}fun(){action}

          九、當前腳本包含其他腳本

          source tesh.sh 或 . tesh.sh

          十、shell中雙括號,雙中括號的含義

          詳見:https://www.jb51.net/article/123081.htm

          十一、示例demo

          這里引用MIT課程里的一個腳本,該課程名稱為《The Missing Semester of Your CS Education》大家可以上網(wǎng)搜索的到,加上注釋幫助大家理解

          #!/bin/bash echo $(ls)    # 執(zhí)行l(wèi)s命令并打印執(zhí)行結(jié)果,這里就是打印當前文件夾下的所有文件echo "Starting program at $(date)" # 這句會首先執(zhí)行data指令來獲取當前時間信息并將該信息重定向到當前語句,再打印輸出echo "Running program $0 with $# arguments with pid $$"  # 此處的$0會重定向為腳本名,$#會重定向為當前參數(shù)數(shù)量 $$為當前執(zhí)行腳本的進程標識號# 此處就是一個for循環(huán),一個一個的拿出調(diào)用腳本時傳入的參數(shù)for file in "$@"; do        grep foobar "$file" > /dev/null 2> /dev/null    # 這里的grep函數(shù)是有返回值的,這里的意思是,返回有或者無時重定向到指定位置,無該文件時重定向到另一指定位置    # 這里要注意,中括號和里面的執(zhí)行指令之間一定要有空格    if [[ $? -ne 0 ]]; then               echo "File $file does not have any foobar, adding one"               echo "# foobar" >> "$file"           fi done


          - END -

          歡迎添加微信加入交流群~


          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲 欧美 另类 综合 偷拍 | 亚洲动漫精品一区 | 欧美日韩精品在线视频 | 日韩色情在线播放 | 在线播放 神尾舞视频 |