1. 程式人生 > >linux shell變數

linux shell變數

shell簡介

是應用程式,該程式提供了一個介面,使用者通過這個介面訪問作業系統核心服務。 linux的shell分類:

  • Bourne Shell (/usr/bin/sh或、/bin/sh) - Bourne again Shell (/bin/bash)—最常用
  • c shell(/usr/bin/csh)
  • k shell(/usr/bin/ksh)

例子

#!/bin./bash
echo "Hello World!"

注: #! 是一個約定的標記,他告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種Shell。

執行Shell指令碼有兩種方法:

(shell指令碼的檔案字尾以 .sh 結尾) 1.作為可執行程式

chmod +x ./test.sh   #使指令碼具有執行許可權.
./test.sh  #執行指令碼 ,必須進入當前目錄

2.作為直譯器引數 直接執行直譯器,其引數是shell指令碼的檔名 例:

./bin/sh test.sh
./bin/php test.php

1.shell變數

定義變數 例:your_name="runoob.com" 注:

  • 命令只能是英文字母、數字、下劃線。且首個字母不能是數字開頭。
  • 中間不能有空格,可以使用下劃線。
  • 不能使用標點符號。
  • 不能使用bash裡的關鍵字。

使用變數 使用定義過的變數,只需在變數前加美元符號即可。如:

your_name="qingjx"
echo $your_name
echo ${your_name}

注:變數名花括號是可選的,主要目的為了幫助直譯器識別變數的邊界。

只讀變數 使用readonly 命令可以將變數定義為制度,只讀變數的值不能被改變。 例:

myUrl="http://www.baidu.com"
readonly myUrl

刪除變數 使用unset命令可以刪除變數。刪除後的變數,不能再次使用。但unset不能刪除readonly變數。

unset myUrl

變數型別:

  • 區域性變數
  • 環境變數
  • shell變數

shell字串

字串是最常用的資料型別之一,字串可以使用單引號(1.單引號中的所有字元都會原樣輸出,即其中的變數值無效。2.單引號中不能出現單獨的單引號,但可以出現成對的單引號

),也可以是雙引號(雙引號中可以有變數,也可以出現轉義字元)。 例:

str='hello world'
name="bob,\"$str\" \n"
bob,hello world

拼接字串 雙引號: your_name=“runoob” greeting="hello, “$your_name”! " greeting_1="hello, ${your_name}! " echo $greeting $greeting_1 結果:

hello, runoob! hello,runoob!

單引號:

greeting_2='hello, '$your_name' ! '
greeting_3='hello,'${your_name} ' ! '
echo greeting_2 greeting_3

結果:

hello,runoob!  hello,${your_name}!

獲取字串長度

string="abcd"
echo ${#string}   #輸出4

提取子字串

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

注:指令碼中`是反引號。

Shell陣列

bash只支援一位陣列,且沒有限制陣列的大小。

定義陣列 在shell命令中,用括號表示陣列,陣列元素用“空格”符號割開。

語法:陣列名=(值1 值2 值3....)

或者

array_name=(
  value0
  value1 
  value2
  value3
    )

還可以單獨定義陣列的各個分量:

  array_name[0]=value0
  array_name[1]=value1
  array_name[n]=valuen

注:可以不適用連續的下標,而且下標的範圍沒有限制。

讀取陣列

讀取陣列的一般格式:${陣列名[下標]}
例:valuen=${array_name[n]}
       echo ${array_name[@]}  # @、*可以獲取陣列中的所有元素

獲取陣列的長度:和獲取字串的方法相同

length=${#array_name[@]}  #取得陣列元素的個數
lengthn=${#array_name[n]}  #取得陣列單個元素的長度

Shell註釋:

 - 單行註釋:  #開頭的行就是註釋

 - 多行註釋: 
       :<<EOF
        ......
        EOF
        或
        :<<'
        ......
        .