Linux-Shell基礎(變量,字符串,數組)


一. 什么是shell

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

  常見的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腳本

  #!是一種約定的標記,它告訴系統這個腳本需要使用什么解釋器執行,即使用哪一種shell
  echo 命令用於向窗口輸出文本。

#!/bin/bash 
echo 'hello word'

  如何運行shell腳本

  1. 作為可執行程序

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

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

  2. 作為解釋器參數

  這種運行方式是,直接運行解釋器,其參數就是 shell 腳本的文件名,這種方式運行的腳本,不需要在第一行指定解釋器信息,寫了也沒用。

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

二. 變量

1. 定義變量

  注意,變量名和等號之間不能有空格,這可能和你熟悉的所有編程語言都不一樣。同時,變量名的命名須遵循如下規則:

  • 命名只能使用英文字母,數字和下划線,首個字符不能以數字開頭。  
  • 中間不能有空格,可以使用下划線(_)。
  • 不能使用標點符號。
  • 不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。

 

your_name="JACK"

2. 使用變量

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

name='qihui' #注意等號兩邊不要留空格
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當成一個變量(其值為空),代碼執行結果就不是我們期望的樣子了。
  推薦給所有變量加上花括號,這是個好的編程習慣。
  已定義的變量,可以被重新定義

3. 只讀變量

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

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

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

4. 刪除變量

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

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

5. 變量類型

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

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

6. 注釋

  1) 單行注釋

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

  2) 多行注釋

多行注釋還可以使用以下格式:
:<<EOF
注釋內容...
注釋內容...
注釋內容...
EOF

EOF 也可以使用其他符號:
:<<'
注釋內容...
注釋內容...
注釋內容...
'

:<<!
注釋內容...
注釋內容...
注釋內容...
!

三. 數據類型

1. 字符串

   字符串是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 的位置(哪個字母先出現就計算哪個):

2. 數組

      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]}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM