真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Shell腳本基礎

什么是Shell

在Linux操作系統(tǒng)中,有兩個非常重要的工具:①Linux命令;②Shell。Linux命令是Linux系統(tǒng)對用戶提供的眾多系統(tǒng)功能接口,每一個Linux命令都能完成一個獨立的系統(tǒng)功能;Shell是一個基于C語言開發(fā)的應用程序,它可以通過各種邏輯語法和程序控制指令把一系列的Linux命令組合在一起,形成一個面向過程的程序命令(Shell Script)。

成都創(chuàng)新互聯(lián)公司業(yè)務包括:成品網站、企業(yè)產品展示型網站建設、品牌網站建設、電子商務型網站建設、外貿營銷網站建設(多語言)、商城建設定制網站開發(fā)、成都營銷網站建設等。效率優(yōu)先,品質保證,用心服務是我們的核心價值觀,我們將繼續(xù)以良好的信譽為基礎,秉承穩(wěn)固與發(fā)展、求實與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質的互聯(lián)網服務!

Linux命令一般需要在特定環(huán)境中執(zhí)行,我們一般的Linux命令就是在Shell中執(zhí)行的,需要特定的環(huán)境變量等支持;而Shell腳本會fork一個子進程去執(zhí)行,如果在腳本中涉及環(huán)境變量的改變則只會改變子進程的環(huán)境,對Shell的環(huán)境變量沒有影響。

我們知道Linux的Shell是一個組合并執(zhí)行Linux命令的應用程序,所以Shell的實現(xiàn)并不只有一種,我們常用的Shell類型包括:sh、C Shell、TCSH、bash。Linux中默認的Shell為bash,一般保存在/bin/bash

也就是說,Linux命令是系統(tǒng)提供的具備各種不同功能的命令集合、Shell是一個可以將多個Linux命令組合為Shell腳本的應用程序,相當于一個腳本解析器。

Shell腳本基礎


Shell腳本語法
  1. 在Linux中l(wèi)腳本的第一行一般會向系統(tǒng)聲明該腳本所使用的解析程序:

    #!/bin/bash,通過這條語句聲明該腳本使用/bin/bash這個應用程序解析

  2. Shell腳本的基本表達式:

    表達式功能
    ++、-- 自增、自減(與C語言的前后自增自減相同)
    +、-、*、/、% 加、減、乘、除、余運算
    ** 冪運算
    >、>=、<、<=、==、!= 比較運算
    <<、>> 按位左移、右移運算
    &、|、^ 與、或、異或運算
    &&、||、! 邏輯與、或、非
    exp?a:b 三目運算符
    #內容 單行注釋
    :< 代表多行注釋(EOF可以使用單引號、感嘆號代替)
  3. 變量賦值:

    如何給變量賦值?如何調用變量?
    Shell的變量使用等于號賦值,且等號之間不允許有空格,必須要直接與等號相連v1="value"
    調用變量只需要將變量名連接在美元符號$后面v2=$v1,也可以使用大括號區(qū)分每個變量的邊界v3=${v1}isgood

      #直接進行變量賦值
      a=12      #默認是字符串類型的"12",進行數(shù)值運算時會解析為數(shù)值型的12
      b=str1        #默認是字符串類型的"str1"
    
      #使用單引號和雙引號進行變量賦值,雙引號會解析變量、轉義字符、反引號命令;而單引號則不會解析任何上面的東西,完全按照字符串字面值賦值。
      v="$a"    #這時變量v的值為12
      v='$a'    #這時變量v的值為'$a'
    
      #列表變量的賦值
      list=(v1,v2,v3)   #括號內為列表內容,中間使用空格分隔
      echo ${list[@]}   #通過${}來調用列表,[]內表示索引,[@]表示列表內的每一項

    注意使用以上方式的變量賦值,是無法進行任何命令以及運算的!,只能將變量解析出來,但是無法進行命令執(zhí)行和數(shù)學運算。

      a=1
      b=2
      c="$a+$b"     #c的值為"1+2"而不是3
      d="ls -al"        #d的值為"ls -al"而不會執(zhí)行
  4. 代換和Shell中的括號

    • 文件名代換

      簡單地說就是一種可以使用在文件名上的通配符:

      *    #表示匹配任意多個任意字符
      ?    #表示匹配一個任意字符
      []   #表示匹配中括號內任意一個字符的第一次出現(xiàn)
      
      cd ./test[123abc]        #匹配test1、test2、test3、testa...
    • 命令代換,單括號

      單括號符功能:①命令組功能,可以執(zhí)行單引號中的多個命令;②命令代換,在變量中的命令會執(zhí)行并正常輸出到標準輸出中;③初始化Shell列表變量
      注意區(qū)分變量環(huán)境和非變量的環(huán)境,只有變量的環(huán)境下需要在單括號外加美元符號

       #在變量中使用反引號或單括號,可以將變量解析為shell命令并執(zhí)行:
       a=`ls -al` #反引號可以進行命令代換
       b=$(ls -al)    #美元括號的內容會進行命令代換
      
       (pwd)  #執(zhí)行pwd命令
       `pwd`  #執(zhí)行pwd命令
    • 運算代換,雙括號

      雙括號符功能:①數(shù)值運算功能,只要內符合C語言運算語法,即可進行數(shù)值運算;②運算代換,在變量中的數(shù)值運算會正常進行后再進行賦值;③for語句功能,雙括號可以在for循環(huán)中使用;
      注意區(qū)分變量環(huán)境和非變量環(huán)境,只有變量環(huán)境下需要在雙括號外加美元符號

       #在變量中使用雙引號,可以將變量解析為數(shù)值運算并執(zhí)行:
       a=10
       b=$(($a+20))   #b的值為30
    • 中括號

      中括號功能:①Shell的內部命令,可用于進行條件測試返回True、False,等同于test命令;②正則表達式和通配符可以使用;③作為列表的索引使用

      要注意,作為條件測試的中括號是一個命令語句而不是一個符號。作為命令前中括號后需要帶一個空格才能接參數(shù),而后中括號就是作為該條件測試命令的最后一個參數(shù),代表參數(shù)輸入結束。前后中括號中間的值都作為命令的參數(shù)。
      并且作為一個命令,[在對開空格的字符串作處理時會發(fā)生問題。

       #if使用中括號條件測試,結果為輸出yes
       if [ 10 -lt 20 ] && [ 1 -lt 2 ]    #此處前中括號后和后中括號前都需要加一個空格
       then
          echo yes
       else
          echo no
       fi
      
       #這里$name會解析為三個字符串,導致[命令參數(shù)錯誤
       name="here and there"
       if [ -n $name ]    #使用[ -n "$name" ]才能正常
       then
          echo "not empty"
       fi
       #這里的結果會報錯  bash: [: too many arguments
    • 雙中括號

      雙中括號功能:①bash的內部關鍵字,能完成[的加強版功能,并且因為[[不是命令而是關鍵字,所以對參數(shù)的解析規(guī)則會略有不同。且與[每次只能做一種判斷不停,[[可以使用&&、||等運算符,可以同時做多種比較。

        #if使用中括號條件測試,結果為輸出yes
       if [[ 10 -lt 20 && 1 -lt 2 ]]  #此處前中括號后和后中括號前都需要加一個空格
       then
          echo yes
       else
          echo no
       fi
      
       #因為對參數(shù)的處理不同,可以直接處理帶空格的字符串
       name="this is a test"
       if [[ -n $name ]]
       then
          echo "not empty"
       fi
       #結果會正常顯示
    • 大括號

      大括號功能:①可以對文件名做擴展,作用類似通配符;②執(zhí)行代碼塊,就是C中的代碼塊,每條命令結束都要加分號;③分隔變量名稱和使用列表變量

       touch test{1..5}.txt   #會創(chuàng)建5個文件,其實就是通配符嘛
      
       a="${this}IsATest" #不使用大括號變量名會粘在一起
       a="${list[@]}"     #選擇列表所有元素
  5. Shell中的特殊字符

    Shell中的字符都有許多特殊的用法:

    特殊字符功能
    ; 分號,表示連續(xù)執(zhí)行命令
    exp & 句尾的&號,表示命令在后臺執(zhí)行
    n&>file 重定向,將文件符n重定向到目標文件
    exp1 && exp2 兩個命令中間的&&,表示exp1返回0才會執(zhí)行exp2
    exp1 || exp2 兩個命令中間的||,表示exp1返回非0才會執(zhí)行exp2
    ${#var} 返回列表或變量的長度
    $0、$1、$2 和運行腳本的命令有關。0表示該腳本文件;1、2分別表示第1、2個參數(shù)
    $*、$@、$# 和運行腳本的命令有關。*和@表示參數(shù)列表;#表示參數(shù)個數(shù)
    $$、$? 和運行腳本的命令有關。\$表示腳本運行PID;?表示腳本退出碼

Shell流程控制
  1. if語句

      #可以寫成正常形式
      if condition1
      then
        cmd1
      elif condition2
      then
        cmd2
      else 
        cmd3
      fi
    
      #也可以寫成一句話形式,中間用分號連接
      if condition1; then cmd1; elif condition2; then cmd2; else cmd3; fi
  2. for語句

      #正常形式
      for var in ${list[@]}
      do
        cmd1
        cmd2
        cmd3
      done
    
      #一句話形式,中間用分號分隔
      for var in ${list[@]}; do cmd1; cmd2; cmd3; done
  3. while語句

    while語句是先判斷條件再執(zhí)行循環(huán),且條件為False時結束循環(huán),同C語言

      #正常形式
      while condition
      do
        cmd1
        cmd2
      done
    
      #一句話形式,中間用分號分隔
      while condition; do cmd1; cmd2; done
  4. until語句

    until語句是執(zhí)行函數(shù)后再判斷條件,且條件為True時結束循環(huán),同C語言

      until condition
      do 
        cmd1
        cmd2
      done
    
      until condition; do cmd1; cmd2; done
  5. case語句

      a=2
      case $a in
      1)
        cmd1
        ;;
      2)
        cmd2
        ;;
      *)
        cmd3
        ;;
      esac
    
      #一句話形式
      a=2
      case $a in 1) cmd1;; 2) cmd2;; *) cmd3;; esac
  6. 跳出循環(huán)

    可以在循環(huán)語句for、while、until以及枚舉語句case中,使用break終止整個流程;使用continue跳過本次流程。此處與C語言相同。


Shell函數(shù)

Shell可以定義函數(shù),之后可以隨意調用。

funName(){  #定義函數(shù),后面不用帶參數(shù),傳參方法和命令相似
    (ls -al $1)
    echo $2

    i=$3
    while [ $i -gt 0 ]
    do
        echo $i
        i=$(($i-1))
    done
}

funName /usr this 3 #調用函數(shù),后面是參數(shù)

新手發(fā)文,歡迎大佬指正錯誤


當前標題:Shell腳本基礎
URL鏈接:http://weahome.cn/article/jsejph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部