shell學習之shell變數
阿新 • • 發佈:2018-12-06
shell指令碼
shell是一個用c語言編寫的程式,是使用者用來操作linux系統的語言,俗稱命令列。
我的第一個shell指令碼
新建一個文字,將其命名為test.sh。在文字中編寫程式碼:
#!/bin/bash
echo “hello wang”
在test.sh資料夾中開啟終端輸入bash test.sh
或者 ./test.sh
就可以執行指令碼。
shell變數
定義變數時,變數名不能加美元符號:
my_name = "wycan"
注意:
- 變數名自能是英文字母、數字和下劃線的組合,首字母不能以數字開頭。
- 變數名中間不能有空格,一般使用下劃線連結
- 不能使用bash保留的關鍵字
- 不能使用標點符號
除了使用顯示賦值,還可以使用語句賦值:
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
該程式碼不會輸出任何資訊
變數型別
- 區域性變數
- 區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。–區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。
- 環境變數
- 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。
- 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
:<<EOF
註釋內容...
註釋內容...
註釋內容...
EOF
- 多行註釋2
:<<'
註釋內容...
註釋內容...
註釋內容...
'
:<<!
註釋內容...
註釋內容...
註釋內容...
!