Linux Shell 變量

1、Shell簡單介紹php

  • shell是一個用C語言編寫的程序,它是用戶使用Linux的橋樑,又是一種程序設計語言。
  • Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶經過這個界面訪問操做系統內核的服務。
  • shell腳本是一種shell編寫的腳本程序

2、Shell環境java

Shell 編程跟 java、php 編程同樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就能夠了。
Linux 的 Shell 種類衆多,常見的有:
  Bourne Shell(/usr/bin/sh或/bin/sh)
  Bourne Again Shell(/bin/bash)
  C Shell(/usr/bin/csh)
  K Shell(/usr/bin/ksh)
  Shell for Root(/sbin/sh)
在通常狀況下,人們並不區分 Bourne Shell 和 Bourne Again Shell,因此,像 #!/bin/sh,它一樣也能夠改成 #!/bin/bash。
#! 告訴系統其後路徑所指定的程序便是解釋此腳本文件爲shell程序linux

3、第一個Shell腳本shell

#!/bin/bash 
echo 'hello word'

注:一、#!是一種約定的標記,它告訴系統這個腳本須要使用什麼解釋器執行,即便用哪種shell
  二、echo 命令用於向窗口輸出文本。編程

4、運行 Shell 腳本有兩種方法數組

一、做爲可執行程序 bash

chmod +x ./test.sh #使腳本具備執行權限
./test.sh #執行腳本

注意,必定要寫成 ./test.sh,而不是 test.sh,運行其它二進制的程序也同樣,直接寫 test.sh,linux 系統會去 PATH 裏尋找有沒有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 裏,你的當前目錄一般不在 PATH 裏,因此寫成 test.sh 是會找不到命令的,要用 ./test.sh 告訴系統說,就在當前目錄找。編程語言

二、做爲解釋器參數編輯器

這種運行方式是,直接運行解釋器,其參數就是 shell 腳本的文件名,如:this

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

這種方式運行的腳本,不須要在第一行指定解釋器信息,寫了也沒用。

5、Shell變量

一、定義變量

e.g:your_name="runoob.com"

注意,變量名和等號之間不能有空格,這可能和你熟悉的全部編程語言都不同。同時,變量名的命名須遵循以下規則:
命名只能使用英文字母,數字和下劃線,首個字符不能以數字開頭。
中間不能有空格,可使用下劃線(_)。
不能使用標點符號。
不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。

二、使用變量

使用一個已經定義的變量,只要在變量名前面加美圓符號
如:

name='haiyan' #注意等號兩邊不要留空格
echo $name 
echo ${name} #推薦使用, 
ehco $name+$name

變量名外面的花括號是可選的,加不加都行,加花括號是爲了幫助解釋器識別變量的邊界,好比下面這種狀況:

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

若是不給skill變量加花括號,寫成echo "I am good at $skillScript",解釋器就會把$skillScript當成一個變量(其值爲空),代碼執行結果就不是咱們指望的樣子了。
推薦給全部變量加上花括號,這是個好的編程習慣。
已定義的變量,能夠被從新定義

三、只讀變量

使用 readonly 命令能夠將變量定義爲只讀變量,只讀變量的值不能被改變。

e.g:
#!/bin/bash
myUrl="http://www.google.com"
readonly myUrl

當對如今只讀的myUrl進行操做時就會報/bin/sh: NAME: This variable is read only.錯

四、刪除變量

使用 unset 命令能夠刪除變量。語法:unset variable_name
變量被刪除後不能再次使用。unset 命令不能刪除只讀變量。

e.g:
#!/bin/sh
myUrl="http://www.runoob.com"
unset myUrl
echo $myUrl

五、變量類型 

運行shell時,會同時存在三種變量:

  • 1) 局部變量 局部變量在腳本或命令中定義,僅在當前shell實例中有效,其餘shell啓動的程序不能訪問局部變量。
  • 2) 環境變量 全部的程序,包括shell啓動的程序,都能訪問環境變量,有些程序須要環境變量來保證其正常運行。必要的時候shell腳本也能夠定義環境變量。
  • 3) shell變量 shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行

一、Shell 字符串

 字符串是shell編程中最多見有用的數據類型,字符串能夠用雙引號,能夠用單引號,也能夠不用引號

(1)單引號

str='this is a string'
#單引號字符串的限制:
#單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
#單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,做爲字符串拼接使用。 

(2)雙引號

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

輸出結果爲:

runoob

雙引號的優勢:

  • 雙引號裏能夠有變量
  • 雙引號裏能夠出現轉義字符 

(3)拼接字符串

your_name="runoob"
# 使用雙引號拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1
# 使用單引號拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3
輸出結果爲:
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

(4)獲取字符串長度

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

 (5)提取子字符串

如下實例從字符串第 2 個字符開始截取 4 個字符:

string="runoob is a great site"
echo ${string:1:4} # 輸出 unoo

(6)查找子字符串

查找字符 i 或 o 的位置(哪一個字母先出現就計算哪一個):
語法不咋懂。。。

二、Shell 數組

bash支持一維數組,不支持多維數組。而且沒有限定數組的大小
相似於 C 語言,數組元素的下標由 0 開始編號。獲取數組中的元素要利用下標,下標能夠是整數或算術表達式,其值應大於或等於 0。

(1)定義數組

在 Shell 中,用括號來表示數組,數組元素用"空格"符號分割開。定義數組的通常形式爲:

數組名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

還能夠單獨定義數組的各個份量:

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

能夠不使用連續的下標,並且下標的範圍沒有限制。

(2)讀取數組

讀取數組元素值的通常格式是:

${數組名[下標]}

例如:

valuen=${array_name[n]}

也使用 @ 符號能夠獲取數組中的全部元素,例如:

echo ${array_name[@]}

 (3)獲取數組的長度:

獲取數組長度的方法與獲取字符串長度的方法相同,例如:

# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
lengthn=${#array_name[n]}

三、shell 註釋

單行註釋

# 開頭的行就是註釋,會被解釋器忽略。
經過每一行加一個 # 號設置多行註釋

多行註釋

多行註釋還可使用如下格式:
:<<EOF
註釋內容...
註釋內容...
註釋內容...
EOF
EOF 也可使用其餘符號: :
<<' 註釋內容... 註釋內容... 註釋內容... ' :<<! 註釋內容... 註釋內容... 註釋內容... !
相關文章
相關標籤/搜索