shell腳 本編程

1、shell腳本語言node

    1.編程語言的分類:python

(1)根據運行方式正則表達式

     編譯運行:源代碼 --> 編譯器 (編譯)--> 程序文件;shell

     解釋運行:源代碼 --> 運行時啓動解釋器,由解釋器邊解釋邊運行;編程

(2)根據其編程過程當中功能的實現是調用庫仍是調用外部的程序文件:bash

      shell腳本編程:利用系統上的命令及編程組件進行編程;編程語言

       完整編程:利用庫或編程組件進行編程;ide

(3)編程模型:測試

      過程式編程語言:以指令爲中心來組織代碼,數據是服務於代碼;ui

         順序執行選擇執行循環執行表明:C,bash

      面向對象的編程語言:以數據爲中心來組織代碼,圍繞數據來組織指令;

類(class):實例化對象,method;

表明:Java, C++, Python

總結:shell腳本編程過程式編程,解釋運行,依賴於外部程序文件運行;

    2.shell腳本格式和規範

        (1)第一行,頂格:給出shebang,解釋器路徑

   用於指明解釋執行當前腳本的解釋器程序文件

常見的解釋器:

#!/bin/bash#!/usr/bin/python#!/usr/bin/perl

        (2)註釋信息:#

#description:#version#author#date

        (3)代碼註釋:

        (4)縮進,適度添加空白行;

        (5)txt格式文本文檔

    3.shell腳本本質:命令的堆積;

          多命令不具備冪等性,須要用程序邏輯來判斷運行條件是否知足

    4.運行腳本方法

        (1)賦予執行權限,並直接運行此程序文件;

    1)chmod +x /PATH/TO/SCRIPT_FILE

         (此處直接+x是賦予所有用戶可執行權限)

    2)/PATH/TO/SCRIPT_FILE

        (2)直接運行解釋器,將腳本以命令行參數傳遞給解釋器程序;

bash /PATH/TO/SCRIPT_FILE

    (此方法和腳本本省有無執行權限無關)

    注意:1)腳本中的空白行會被解釋器忽略;

       2)空白行表示:加一行echo,則顯示爲空白行

      3)註釋行除shebang,餘下全部以#開頭的行,都會被視做)註釋行而被忽略

       4)shell腳本的運行是經過運行一個子shell進程實現的;

 

 

 

 

2、算數運算

    1.算數符號:   +,-,*,/,  **, %

    2.加法運算格式

         (1) let  VAR=算術運算表達式

         (2) VAR=$[算數運算表達式]

         (3) VAR=$((算數運算表達式))

         (4) expr命令 :VAR=$(expr $ARG1 $OP $ARG2)

       注意:乘法符號(*)在有些場景中須要使用轉義符防止和通配符、正則表達式衝突

    3.加強型賦值:變量作某種算術運算後回存至此變量中

(1)let i=$i+#    let i+=#

+=,-=,*=, /=, %=

(2)自增

VAR=$[$VAR+1]let  VAR+=1let  VAR++

(3)自減

VAR=$[$VAR-1]let  VAR-=1let  VAR--

 

 

 

3、傳遞參數

  1.位置參數變量

      (1)# myscript.sh  argu1 argu2

 引用方式:$1,  $2, ..., ${10}, ${11}, ...

    $1:第一個輸入參數

    $2第二個傳遞的參數

   當兩位數時要用括號括起來${10}, ${11}, ..

      (2)輪替機制:調用n個位置變量

       shift   [n]:位置參數輪替;每次剔除n個,默認爲1

 2.特殊變量

$0 腳本自己路徑

$#腳本參數的個數

$*顯示全部參數,各參數讀成多個獨立字符串

$@顯示全部參數,各參數讀成一個完整的字符串形式

 3.read用戶交互經過鍵盤輸入數據,從而完成變量賦值操做

read [option]... [變量name ...] 

  -p 'PROMPT'  顯示提示信息

  -t TIMEOUT   超出時間提早結束

time out and return failure if a complete line of input is not read withint TIMEOUT seconds.

注意:通常輸入以空格做爲分隔符,但時當輸入數量大於變量是,最後多餘的所有賦予最後一個變量

wKiom1apwgiiz1CmAABuLJo5m8E730.jpg

 

 

 

4、條件測試

  1.條件測試:判斷某需求是否知足,須要由測試機制來實現

  2.測試表達式編寫語法

(1)執行命令,並利用命令狀態返回值來判斷;

0:成功

1-255:失敗

(2)測試表達式

test  EXPRESSION

[ EXPRESSION ]

` EXPRESSION `

       注意:EXPRESSION兩端必須有空白字符,不然爲語法錯誤;

  3.bash的測試類型

      (1)數值測試:數值比較,雙目測試

-eq:是否等於; [ $num1 -eq $num2 ]

-ne:是否不等於;

-gt:是否大於;

-ge:是否大於等於;

-lt:是否小於;

-le:是否小於等於;

      (2)字符串測試:雙目測試

==:是否等於;

>:是否大於;

<:是否小於;

!=:是否不等於;

=~:左側字符串是否可以被右側的PATTERN所匹配;

-z "STRING":判斷指定的字串是否爲空;空則爲真,不空則假;

-n "STRING":判斷指定的字符串是否不空;不空則真,空則爲假;

注意:

     1)字符串要加引用;

$變量時候,要" ",防止變量空值時候,比較兩邊類型不一致會報錯

     2)最好要使用` `;但多個條件邏輯關係時可能要用[  ]

      (3)文件測試:通常爲單目測試,存在爲真,不存在未假

   1)文件存在性測試:

-a  FILE

-e  FILE

   2)存在性及類型測試:

-b    FILE:是否存在而且爲 塊設備 文件;

-c  FILE:是否存在而且爲 字符設備 文件;

-d  FILE:是否存在而且爲 目錄文件;

-f  FILE:是否存在而且爲 普通文件;

-h  FILE或 -L  FILE:是否存在而且爲 符號連接文件;

-p FILE:是否存在且爲 命名管道文件;

-S  FILE:是否存在且爲 套接字文件;

   3)文件權限測試:

-r  FILE:是否存在而且 對當前用戶可讀;

-x  FILE:是否存在而且 對當前用戶可執行;

-w  FILE:是否存在而且 對當前用戶可寫;

   4)特殊權限測試:

-u  FILE:是否存在而且 擁有suid權限;

-g  FILE:是否存在而且 擁有sgid權限;

-k  FILE:是否存在而且 擁有sticky權限;

   5)文件是否有內容:

-s  FILE:是否有內容;

   6)時間戳測試:

-N FILE:文件自從上一次讀操做後是否被修改過;

   7)從屬關係測試:

-O  FILE:當前用戶是否爲文件的屬主;

-G  FILE:當前用戶是否屬於文件的屬組;

   8)雙目測試:

FILE1  -ef  FILE2:是否指向同一個文件系統的相同inode的硬連接;

FILE1  -nt  FILE2:FILE1是否新於FILE2;

FILE1  -ot  FILE2:FILE1是否舊於FILE2;

 4.組合測試條件:邏輯運算

(1)第一種方式:

COMMAND1 && COMMAND2

COMMAND1 || COMMAND2

! COMMAND

[ -O FILE ] && [ -r FILE ]

(2)第二種方式:

EXPRESSION1  -a  EXPRESSION2

EXPRESSION1  -o  EXPRESSION2

! EXPRESSION

[ -O FILE -a -x FILE ]

  5.腳本的狀態返回值

         (1)默認是腳本中執行的最後一條件命令  的狀態返回值

         (2)自定義狀態退出狀態碼

exit [n]n爲本身指定的狀態碼

注意:shell進程遇到exit時,即會終止,所以,整個腳本執行即爲結束;

  6.腳本檢測&調試

bash -n /path/to/some_script  檢測腳本中的語法錯誤不能檢出出邏輯錯誤

bash -x /path/to/some_script  調試執行,顯示過程

相關文章
相關標籤/搜索