<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        

      Shell命令-基礎

      Shell命令

      1 變量

      定義變量時,變量名不加美元符號$,注意,變量名和等號之間不能有空格

      a="myname"
      

      用語句給變量賦值時

      for file in `ls /etc` # 執行這個命令,使用的不是單引號,而是反單引號`,存到臨時變量中
      或
      for file in $(ls /etc) # 將這個命令的執行結果,作為臨時變量,用$引用
      

      使用變量

      your_name="qinjx"
      echo $your_name
      echo ${your_name}
      

      變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界.

      在變量和字符緊挨在一起時,必須使用{},才能使解釋器區分出來。

      推薦給所有變量加上花括號,這是個好的編程習慣。

      for skill in Ada Coffe Action Java; do
          echo "I am good at ${skill}Script"
      done
      

      已定義的變量,可以被重新定義.

      2 Shell 字符串

      字符串是shell編程中最常用最有用的數據類型(除了數字和字符串,也沒啥其它類型好用了),字符串可以用單引號,也可以用雙引號,也可以不用引號。

      單引號字符串的限制:

      • 單引號里的任何字符都會原樣輸出單引號字符串中的變量是無效的;
      • 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符后也不行),但可成對出現,作為字符串拼接使用。

      雙引號:

      your_name="runoob"
      str="Hello, I know you are \"$your_name\"! \n"
      echo -e $str
      

      雙引號的優點:

      • 雙引號里可以有變量
      • 雙引號里可以出現轉義字符

      字符串的多種應用

      • 獲取字符串的長度

        string="abcd"
        echo ${#string}   # 輸出 4
        
      • 提取子字符串,適合于已知子串的起始和終止索引時,以一種閉區間的形式都包含,索引從0開始計數。

        string="runoob is a great site"
        echo ${string:1:4} # 輸出 unoo
        
      • 查找子字符串i或o的位置(哪個先出現就先計算哪個)

        string="runoob is a great site"
        echo `expr index "$string" io`  # 輸出 4, ``中是命令,返回結果,被echo到控制臺
        

      3 數組

      bash支持一維數組,不支持多維數組

      • 定義數組

        數組名=(值1 值2 ... 值n)
        a=("a" "b" "c")
        
      • 訪問數組,使用下標.使用 @ 符號可以獲取數組中的所有元素。數組的下標可以是不連續的整數或者字符串

        ${數組名[下標]} # 此時的{}是必須的
        valuen=${array_name[n]}
        echo ${array_name[@]}
        
        #!/bin/bash
        a=("a" "b" "c")
        echo $a # a
        echo ${a} # a
        echo ${a[@]} # a b c
        echo ${#a} # 1
        echo ${#a[@]} # 3
        echo ${#a[*]} # 3
        echo ${a[1]} # b
        
      • 獲取數組長度

        echo ${#a[@]} # 輸出數組a的長度 
        echo ${#a[1]} # 輸出a[1]的長度
        
      • 獲取數組的所有鍵. 通過鍵遍歷數組

        #!/bin/bash
        a=("a" "b" "c")
        for i in ${!a[@]}; do # 通過加!的方式,獲取數組的所有鍵,循環遍歷
         echo "${i} =》 ${a[i]}"
        done
        # 以下為輸出
        0 =》 a
        1 =》 b
        2 =》 c
        

      4 運算符

      shell中運算符分為多種:

      1. 算術運算符

        注意:

        1、表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2

        2、完整的表達式要被 `` 包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊

        3、可以使用加減乘除、取余、賦值、相等、不等運算(共8種) 的運算

        4、相等 和 不等運算,要在[]之中,并且不能與[] 相連,返回true or false,常用在if條件中

        5、進行乘法運算時,必須使用 \* ,如果使用*,會報錯

        6、在 MAC 中 shell 的 expr 語法是:$((表達式)),此處表達式中的 "*" 不需要轉義符號 "" 。

      2. 關系運算符

        注意:

        1、關系運算符只支持數字,不支持字符串,除非字符串的值是數字

        2、和相等、不等運算符一樣,這些關系運算符也是需要在[]中使用,并且不能和[] 相連。

        3、不要使用 >,>=,之類的符號

      3. 布爾運算符(與或非)

        注意:

        1、和相等、不等運算符一樣,這些關系運算符也是需要在[]中使用,并且不能和[] 相連

        2、適用于多個條件的組合的情況

        3、可以用邏輯運算符代替

      4. 字符串運算符

        1、=和==在判斷字符串是否相同上,是相同的

        2、最好使用 [ $a ] 來判斷變量a是否為null或者空字符串(""),不要使用 -z ,可能不準確

      5. 文件測試運算符

        用于檢測Unix文件的各種屬性,屬性檢測描述如下表

        常用的有 :

        • -d : 文件夾/目錄 dir
        • -f : 普通文件 file(既不是文件夾/目錄,也不是設備文件)
        • -r : read 檢測文件是否可讀,如果是,則返回 true
        • -w : write 檢測文件是否可寫,如果是,則返回 true
        • -x : 檢測文件是否可執行,如果是,則返回 true
        • -s : 檢測文件是否為空(文件大小是否大于0),不為空返回 true
        • -e : exist 檢測文件(包括目錄)是否存在,如果是,則返回 true

      4.1 算術運算符

      注意:原生的bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如awk和expr最常用。

      expr 是一款表達式計算工具,使用它能完成表達式求值的操作

      #!/bin/bash
      # 算數運算符 即符號兩邊都為數字,或者可以解析為數字
      echo `expr 2 + 2` # 4
      # 變量代表的數字也可以
      a=3
      b=4
      echo `expr $a + $b` # 7
      
      # 也可以執行
      c='4'
      d=5
      echo `expr $c + $d` # 9
      
      c='55'
      d="54"
      echo `expr $c + $d` # 109
      
      c='5a5'
      d="54a"
      echo `expr $c + $d` # 報錯 expr: non-integer argument
      
      #!/bin/bash
      # 算數運算符 即符號兩邊都為數字,或者可以解析為數字
      # echo `expr 2 * 2` # expr: syntax error: unexpected argument ‘run’
      echo `expr 2 \* 4` 
      
      運算符 說明 舉例
      + 加法 expr $a + $b 結果為 30。
      - 減法 expr $a - $b 結果為 -10。
      * 乘法 expr $a \* $b 結果為 200。
      / 除法 expr $b / $a 結果為 2。
      % 取余 expr $b % $a 結果為 0。
      = 賦值 a=$b 把變量 b 的值賦給 a。
      == 相等。用于比較兩個數字,相同則返回 true。 [ $a == $b ] 返回 false。
      != 不相等。用于比較兩個數字,不相同則返回 true。 [ \$a != \$b ] 返回 true。

      4.2 關系運算符

      運算符 說明 舉例
      -eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
      -ne 檢測兩個數是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
      -gt 檢測左邊的數是否大于右邊的,如果是,則返回 true。 [ $a -gt $b ] 返回 false。
      -lt 檢測左邊的數是否小于右邊的,如果是,則返回 true。 [ $a -lt $b ] 返回 true。
      -ge 檢測左邊的數是否大于等于右邊的,如果是,則返回 true。 [ $a -ge $b ] 返回 false。
      -le 檢測左邊的數是否小于等于右邊的,如果是,則返回 true。 [ $a -le $b ] 返回 true。

      4.3 布爾運算符

      運算符 說明 舉例
      ! 非運算,表達式為 true 則返回 false,否則返回 true。 [ ! false ] 返回 true。
      -o 或運算,有一個表達式為 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
      -a 與運算,兩個表達式都為 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

      a是and的簡寫,o是or的簡寫,!是非

      邏輯運算符

      運算符 說明 舉例
      && 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
      || 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

      4.4 字符串運算符

      #!/bin/bash
      a="aaa"
      b="bbb"
      if [ $a != $b ]
      then 
        echo 1 # 輸出1 證明 != 可以用于判斷字符串是否相同的情況, == 同理
      fi
      

      下表列出了常用的字符串運算符,假定變量 a 為 "abc",變量 b 為 "efg":

      運算符 說明 舉例
      = 檢測兩個字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
      != 檢測兩個字符串是否不相等,不相等返回 true。 [ $a != $b ] 返回 true。
      -z 檢測字符串長度是否為0,為0返回 true。 [ -z $a ] 返回 false。
      -n 檢測字符串長度是否不為 0,不為 0 返回 true。 [ -n "$a" ] 返回 true。
      $ 檢測字符串是否不為空,不為空返回 true。 [ $a ] 返回 true。
      #!/bin/bash
      # 關于 -z 的測試
      # test1
      a=""
      b="sdf"
      if [ -z $a ]
      then 
        echo "a is zero" # 輸出這個,證明空字符串的長度為0
      else 
        echo "a is not zero" 
      fi
      
      if [ -z $b ]
      then 
        echo "b is zero" 
      else 
        echo "b is not zero"  # 輸出這個,證明b的長度不為0
      fi
      
      # test2
      # a 未賦值的情況
      #!/bin/bash
      a=
      b="sdf"
      if [ -z $a ]
      then 
        echo "a is zero" # 輸出這個
      else 
        echo "a is not zero" 
      fi
      
      if [ -n $a ]
      then 
        echo "a is not zero"  # 輸出這個
      else 
        echo "a is zero" 
      fi
      # 輸出 證明最好不要這樣做,會產生不可控的風險。
      a is zero
      a is not zero
      
      #!/bin/bash
      # 關于字符串判斷是否為null的問題
      a="22"
      b="sdf"
      if [ $a ]
      then 
        echo "a is not null"  # 輸出這個
      else 
        echo "a is null" 
      fi
      
      # 分別用未賦值、""、"111"測試
      # a is null
      # a is null
      # a is not null
      # 所以最好使用 $a 來判斷字符串是否為空
      

      4.5 文件測試運算符

      操作符 說明 舉例
      -b file 檢測文件是否是塊設備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
      -c file 檢測文件是否是字符設備文件,如果是,則返回 true。 [ -c $file ] 返回 false。
      -d file 檢測文件是否是目錄,如果是,則返回 true。 [ -d $file ] 返回 false。
      -f file 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。 [ -f $file ] 返回 true。
      -g file 檢測文件是否設置了 SGID 位,如果是,則返回 true。 [ -g $file ] 返回 false。
      -k file 檢測文件是否設置了粘著位(Sticky Bit),如果是,則返回 true。 [ -k $file ] 返回 false。
      -p file 檢測文件是否是有名管道,如果是,則返回 true。 [ -p $file ] 返回 false。
      -u file 檢測文件是否設置了 SUID 位,如果是,則返回 true。 [ -u $file ] 返回 false。
      -r file 檢測文件是否可讀,如果是,則返回 true。 [ -r $file ] 返回 true。
      -w file 檢測文件是否可寫,如果是,則返回 true。 [ -w $file ] 返回 true。
      -x file 檢測文件是否可執行,如果是,則返回 true。 [ -x $file ] 返回 true。
      -s file 檢測文件是否為空(文件大小是否大于0),不為空返回 true。 [ -s $file ] 返回 true。
      -e file 檢測文件(包括目錄)是否存在,如果是,則返回 true。 [ -e $file ] 返回 true。

      5 echo

      echo指令用于字符串的輸出

      echo "string"
      echo "1\n2" # 默認是不開啟轉義的
      echo -e "1 \n 2" # 通過 -e 選項開啟轉義,即充當轉義字符反斜線的翻譯器。
      echo -e "OK! \c" # -e 開啟轉義 \c 不換行
      echo "It is a test" > myfile # 把結果重定向到文件中,以覆蓋寫的方式;>> 為追加寫的方式
      echo '$name\"' # $name\"   單引號,里面的字符原樣輸出,不會進行取變量或者轉義操作(因為單引號的作用)。
      echo `date` # Fri 17 Feb 2023 12:16:00 PM UTC 顯示命令的執行結果
      

      6 printf

      printf更適合需要格式化輸出的場景。echo會自動添加換行符,printf不會。

      語法

      printf  format-string  [arguments...]
      

      參數說明:

      • format-string: 為格式控制字符串
      • arguments: 為參數列表。
      #!/bin/bash
      printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg  
      printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
      printf "%-10s %-8s %-4.2f\n" 楊過 男 48.6543
      printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
      # 輸出
      姓名     性別   體重kg
      郭靖     男      66.12
      楊過     男      48.65
      郭芙     女      47.99
      

      說明:

      %s %c %d %f 都是格式替代符,%s 輸出一個字符串,%d 整型輸出,%c 輸出一個字符,%f 輸出實數,以小數形式輸出。

      %-10s 指一個寬度為 10 個字符(- 表示左對齊,沒有則表示右對齊),任何字符都會被顯示在 10 個字符寬的字符內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。

      %-4.2f 指格式化為小數,其中 .2 指保留2位小數

      #!/bin/bash
       
      # format-string為雙引號
      printf "%d %s\n" 1 "abc"
      
      # 單引號與雙引號效果一樣
      printf '%d %s\n' 1 "abc"
      
      # 沒有引號也可以輸出
      printf %s abcdef
      
      # 格式只指定了一個參數,但多出的參數仍然會按照該格式輸出,format-string 被重用
      printf %s abc def
      
      printf "%s\n" abc def
      
      printf "%s %s %s\n" a b c d e f g h i j # 會自動補null。相當于沒有 arguments,那么 %s 用NULL代替
      
      # 如果沒有 arguments,那么 %s 用NULL代替,%d 用 0 代替
      printf "%s and %d \n"
      
      # 輸出
      1 abc
      1 abc
      abcdefabcdefabc
      def
      a b c
      d e f
      g h i
      j  
       and 0
      

      轉義字符

      序列 說明
      \a 警告字符,通常為ASCII的BEL字符
      \b 后退
      \c 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),而且,任何留在參數里的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略
      \f 換頁(formfeed)
      \n 換行
      \r 回車(Carriage return)
      \t 水平制表符
      \v 垂直制表符
      \ 一個字面上的反斜杠字符
      \ddd 表示1到3位數八進制值的字符。僅在格式字符串中有效
      \0ddd 表示1到3位的八進制值字符

      7 流程控制

      和 Java、PHP 等語言不一樣,shell 的流程控制不可為空

      在 sh/bash 里,如果 else 分支沒有語句執行,就不要寫這個 else

      7.1 if-else

      有兩種寫法

      # 1 寫成多行的形式
      if condition
      then 
      	command
      fi
      # 2 寫在一行中 適用于終端命令提示符
      if condition; then command; fi 
      
      # 1 if else 格式
      if condition
      then
          command1 
      else
          command2
      fi
      
      # 2 if else-if else
      if condition1
      then
          command1
      elif condition2 
      then 
          command2
      else
          commandN
      fi
      

      關于condition的格式

      # 1 判斷條件使用 []時,大于小于使用 -gt -lt
      #!/bin/bash
      a=10
      b=11
      if [ $a -gt $b ]
      then 
        echo dayu
      else
        echo xiaoyu
      fi
      
      # 2 如果使用((...))時,大于小于使用 > <
      #!/bin/bash
      a=10
      b=11
      if (($a>$b)) # 可以加$,也可以不加,為了統一標準,最好還是加上
      then 
        echo dayu
      else
        echo xiaoyu
      fi
      

      7.2 for循環

      一般是用于遍歷數組,有兩種寫法(需要根據場景不同,選擇合適的遍歷方式):

      #!/bin/bash
      a=("A" "b" "d") # 定義一個數組
      # 1 使用鍵遍歷。輸出 鍵 和 對應的值
      for i in ${!a[@]}; do
        echo "$i -> ${a[i]}"
      done
      # 2 只輸出 值
      for i in ${a[@]}; do
        echo "$i"
      done
      

      注意:

      這兩種方式很容易搞混,加 ! 的才是可以取到鍵的

      并且數組后一定要跟上[@],[@]表示取得所有元素

      7.3 while

      while循環用于執行一系列的命令,也可用于從輸入文件中讀取數據

      #!/bin/bash
      int=1
      while(( $int<=5 ))
      do
          echo $int
          let "int++"
      done
      

      例子中,使用了Bash let命令,它用于執行一個或多個表達式,變量計算中不需要加上 $ 來表示變量

      # 用于讀取文件
      #!/bin/bash
      while read line
      do
      	echo "$line"
      done << config.txt
      
      # 無限循環
      while true
      do
          command
      done
      # 或者
      for (( ; ; ))
      

      continue 和 break 的作用和大多數編程語言中含義相同,即 continue 跳過本次循環,break 跳出所有循環

      8函數

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

      說明:

      • 1、可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數。
      • 2、參數返回,可以顯示加:return 返回,如果不加,將以最后一條命令運行結果,作為返回值。 return后跟數值n(0-255)
      參數處理 說明
      $# 傳遞到腳本或函數的參數個數
      $* 以一個單字符串顯示所有向腳本傳遞的參數
      $$ 腳本運行的當前進程ID號
      $! 后臺運行的最后一個進程的ID號
      $@ 與$*相同,但是使用時加引號,并在引號中返回每個參數。
      $- 顯示Shell使用的當前選項,與set命令功能相同。
      $? 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

      注意:

      1、所有函數在使用前必須定義。這意味著必須將函數放在腳本開始部分,直至shell解釋器首次發現它時,才可以使用。調用函數僅使用其函數名即可。

      2、$? 獲取函數的返回值,僅對上一條指令負責。如果中間插入了別的指令,則不能正確獲得函數返回值。

      3、大于等于10個參數時,通過${10}獲取,不能$10

      9 shell文件包含

      和其他語言一樣,Shell 也可以包含外部腳本。這樣可以很方便的封裝一些公用的代碼作為一個獨立的文件。

      Shell 文件包含的語法格式如下:

      兩種方式:

      . filename   # 注意點號(.)和文件名中間有一空格
      
      或
      
      source filename
      
      #使用 . 號來引用test1.sh 文件
      . ./test1.sh
      # 或者使用以下包含文件代碼
      # source ./test1.sh
      echo 132
      

      Linux命令大全

      posted @ 2023-02-16 21:15  永恒&  閱讀(82)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 女人被狂躁c到高潮喷水一区二区| 久久精品一本到99热免费| 亚洲人成人网站色www| 国产一区二区日韩在线| 天天躁夜夜躁狠狠喷水| av深夜免费在线观看| 蜜臀av无码一区二区三区| 久久香蕉欧美精品| 少妇夜夜春夜夜爽试看视频| 強壮公弄得我次次高潮A片| 激情四射激情五月综合网| 亚洲乱理伦片在线观看中字| 国产成人免费ā片在线观看| 高潮喷水抽搐无码免费| 亚洲一区二区三区自拍偷拍| 亚洲国产成人精品无码区蜜柚| 国产情侣激情在线对白| 日韩美av一区二区三区| 久久综合亚洲色一区二区三区| 漂亮人妻中文字幕丝袜| 成人伊人青草久久综合网| 免费看无码自慰一区二区| 国产成人一区二区三区免费| 九色国产精品一区二区久久| 99精品国产一区二区三区不卡 | 亚洲精品综合一区二区三区在线| 国产午夜精品福利视频| AV教师一区高清| 亚洲欧美成人一区二区三区| 五月综合网亚洲乱妇久久| 亚洲综合伊人五月天中文| 最新的国产成人精品2022| 无码丰满人妻熟妇区| 久久夜色精品国产亚洲av| 亚洲成a人片在线观看中| 亚洲av日韩av永久无码电影| 成人啪精品视频网站午夜| 性久久久久久| 竹菊影视欧美日韩一区二区三区四区五区| 国产精品中文字幕视频| 亚洲2017天堂色无码|