天天看點

shell腳本之從入門到放棄shell腳本之從入門到放棄-----shell基礎篇

shell腳本之從入門到放棄-----shell基礎篇

  • 前幾天接到了一個新的任務,要求使用shell腳本完成讀取多個伺服器以及資料庫的配置資訊。雖然最後搞成功了,但是會覺得網上這些東西既多又雜,給我學習實踐帶來了很大的困擾,是以結合老夫的實踐經驗總結一下shell腳本親測成功的東西。
  • 本篇是對shell腳本基礎語句的了解。

什麼是shell

  • Shell腳本與Windows/Dos下的批處理相似,也就是用各類指令預先放入到一個檔案中,友善一次性執行的一個程式檔案,主要是友善管理者進行設定或者管理用的。但是它比Windows下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了Linux/Unix下的指令。
  • 對于使用者來說,shell是最重要的實用程式,深入了解和熟練掌握shell的特性及其使用方法,是用好linux系統的關鍵。
  • ps:shell就是一系列指令的集合。

shell執行指令的方式

  • 互動式
    • 解釋執行使用者的指令。即使用者輸入一條指令,shell就解釋執行一條
  • 批處理
    • 使用者事先寫一個Shell腳本(Script),其中有很多條指令,讓Shell一次把這些指令執行完,而不必一條一條地敲指令

      以上就是他的一些簡單了解,下面就是幹貨,不要錯過!

變量命名

  • 預設情況下,所有變量都被看做字元串并以字元串來存儲,即使它們被指派為數值時也是如此。

    shell腳本中對變量的老夫個人感覺沒有那麼強,不像是java這種強類型語言,在邏輯處理過程中還需要對各種資料類型進行對應的轉換,shell腳本就是一個字元串走天下,他自己會在讀取你的變量時結合你的應用場景進行對應的類型轉換。

  • 具體命名規則為:開頭是一個字母或下劃線,後面可以接任意長度的字母、數字或下劃線符号,變量名的字元長度并無限制(Bourne shell中)。不過為了相容性(一些早期的shell裡變量名是有長度限制的),一般還是不要超過255個字元。
  • 另外,Linux 是區分大小寫滴(ps:這個很關鍵,shell腳本的報錯機制并沒有java這麼完善,但是變量又是随定義随應用的。可能一個大小寫不注意,後期排查起來就會很困難,他并不會空指針異常!)

變量指派

  • 變量名=變量值
  • 指派語句兩邊不能有空格(即 “=” 号兩邊不能有空格)。等号右邊若有空格的話,需要加上引号(單引号或雙引号都是可以的)
  • 示例:flag=0

    這就定義了一個變量flag的值為0,注意,這裡是字元串類型

  • 其實還有很多定義變量的方法

    比如:var= (未指派變量,值為null)

    比如:read指令 讀取标準輸入的資料,然後存儲到指定的變量中。

    這裡講的比較基礎,以後這些可以自己去實驗。

取變量的值

  • 對變量定義之後,後續的腳本中會使用到這個變量的值,那如何擷取到?

    shell 中可以在變量名前加上 $ 字元來取變量的值。

  • 取出上述的flag的值:$ flag或者$ {variable}

""與’'與``的差別

  • 在單引号中,所有特殊字元都沒有特殊含義;
  • 在雙引号中,"$"、" `` “(反引号)、”" 有特殊含義,其餘的沒有特殊含義。
  • 至于反引号`,反引号中可以用來引用系統指令,其中的内容将會被優先執行
  • ps 反引号 就是數字1左邊,esc下面的建。在英文輸入法下輸入

變量的類型(了解一下吧,覺得會用就成了)

  • 使用者自定義變量

    就是咱們自己定義的變量,類似于各種語言中自己定義的變量

  • 環境變量

    環境變量又可以分為自定義環境變量和bash内置的環境變量,環境變量可以在指令行中設定和建立,使用者退出指令行時這些變量值就會丢失,想要永久儲存環境變量,可在使用者家目錄下的. bash_profile或. bashrc(非使用者登入模式特有,如:SSH)檔案中,或在/etc/profile檔案中定義,這樣每次使用者登入時這些變量都将被初始化。

  • 位置參數變量

    當我們執行一個 shell 腳本時,如果希望擷取到指令行的參數資訊,就可以使用到位置參數變量.簡單來說就是将你腳本中需要用到變量進行存儲,當你想用的時候直接用變量即可。

  • 預定義變量

    就是 shell 設計者事先已經定義好的變量,可以直接在 shell 腳本中使用。

預定義變量 用途
$$ 目前程序的程序号(PID)
$? 最後一次執行的指令的傳回狀态。如果這個變量的值為 0,則證明上一條指令正确執行;如果這 個變量的值為非 0 (具體是哪個數由指令自己來決定),則證明上一條指令執行錯誤
$1 背景運作的最後一個程序的程序号(PID)

邏輯運算

備注:for,while,until三個大同小異,一通全通

  • for循環

    格式:

    for var in list

    do

    commands //執行指令操作集合

    done

    舉例:

#!/bin/bash
numflag=165      #定義一個退出值
index=1          #定義一個計數器
if [ -z "$1" ];then              #對使用者輸入的參數做判斷,如果未輸入參數則傳回腳本的用法并退出,退出值165
  echo "Usage:$0 + canshu"
  exit $number
fi
echo "listing args with \$*:"         #在螢幕輸入,在$*中周遊參數
for arg in $*                     
do
  echo "arg: $index = $arg"         
  let index+=1
done
echo
index=1                       #将計數器重新設定為1
echo "listing args with \"\$@\":"    #在"$@"中周遊參數
for arg in "$@"
do
  echo "arg: $index = $arg"
  let index+=1
done
           
  • while循環

    while 條件測試

    do

    commands //執行指令操作集合

    done

  • until

    until 條件測試

    do

    commands //執行指令操作集合

    done

  • 數字運算

    這裡提供給大家三種方式吧。

1.直接定義成數值變量:

declare -i num=10
num=$num/2
           

2.使用雙圓括号:

num=10
num=$(($num/2))
           

3.使用expr指令:

num=10
num=expr $num/ 100`
           

總結

其實以上就是一些基本的常識,下篇文章會寫如何實作本文中提到的使用shell腳本讀取各個資料庫以及應用的配置。

繼續閱讀