1. 程式人生 > >shell學習之shell變數

shell學習之shell變數

shell指令碼

shell是一個用c語言編寫的程式,是使用者用來操作linux系統的語言,俗稱命令列。

我的第一個shell指令碼

新建一個文字,將其命名為test.sh。在文字中編寫程式碼:

#!/bin/bash
echo “hello wang”

在test.sh資料夾中開啟終端輸入bash test.sh 或者 ./test.sh 就可以執行指令碼。

shell變數

定義變數時,變數名不能加美元符號:

my_name = "wycan"

注意:

  1. 變數名自能是英文字母、數字和下劃線的組合,首字母不能以數字開頭。
  2. 變數名中間不能有空格,一般使用下劃線連結
  3. 不能使用bash保留的關鍵字
  4. 不能使用標點符號

除了使用顯示賦值,還可以使用語句賦值:

for file in 'ls /etc'
或者
for file in $(ls /etc)

使用變數

變數定義後,如果要使用變數,需要在變數前加上# ,這於其他程式語言有所不同。

#!/bin/bash
my_name="wycan"
echo $my_name
echo ${my_name}

變數名外面的花括號是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界,比如下面這種情況:

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

只讀變數

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

#!/bin/bash
my_name="wycan"
readonly myUrl
my_name="wycan"    //在這裡嘗試修改會出錯

刪除變數

使用unset命令可以刪除變數

#!/bin/bash
my_name="wycan"
unset my_name
echo $my_name

該程式碼不會輸出任何資訊

變數型別

  1. 區域性變數
    • 區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。–區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。
  2. 環境變數
    • 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。
  3. shell變數
    • shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行

shell中的字串

shell中字串可以使用單引號也可以使用雙引號

但是shell對單引號是有限制的

  • 單引號中的字串會原樣輸出,不會識別其中的變數
  • 單引號字串中不能出現單獨的單引號

雙引號:

  • 雙引號裡可以有變數
  • 雙引號裡可以出現轉義符

示例:

my_name='wycan'
str="hello my name is ${my_name} ! \n"
echo $str

輸出結果為:
hello my name is wycan

拼接字串

#bin/bash
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} !

獲取字串長度

str="wycan"
echo ${#str}

輸出:4

提取子字串

str="study shell is wery happy"
echo ${str:1:4}

輸出 tudy

查詢子字串

查詢字元 i 或 o 的位置(哪個字母先出現就計算哪個):

string="runoob is a great site"
echo `expr index "$string" io` 

輸出 4
需要注意的是echo `expr index "$string" io` 中不是單引號 ,而是反引號`

shell陣列

bash只支援一維陣列,並且不限制陣列的大小,陣列下標從0開始

定義陣列

array_name=(value0 value1 value2 value3)

或者

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

讀取陣列

${陣列名[下標]}

value=${array_name[0]}    # 讀取陣列的第一個

使用@符號可以獲取陣列中所有元素

value=${array_name[@]}

獲取陣列的長度

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

shell 註釋

shell有三種註釋方法

1.單行註釋, 以# 開頭的行就是註釋,會被直譯器忽略

# 這是註釋內容
  1. 多行註釋格式1
:<<EOF
註釋內容...
註釋內容...
註釋內容...
EOF
  1. 多行註釋2
:<<'
註釋內容...
註釋內容...
註釋內容...
'

:<<!
註釋內容...
註釋內容...
註釋內容...
!