1.Shell腳本概念
1.定義:shell script 是利用shell的功能所寫的一個“程序”,這個程序是使用純文本文件,將一些shell的語法和命令寫在裏面,搭配成正則表達式、管道命令和數據流重定向等功能。以達到我們所想要的目的。
2.範例
[root@localhost ~]# vim 01.sh #!/bin/bash #a simple example ! # echo "please input your name: " read Name echo "Hello , $Name !!!"
解析:
在shell腳本中,我們一般會把 #!/bin/bash 放在第一行,這樣當我們未指明運行的shell時,系統會默認的以bash來運行。在shell中我們通常把#放在一行的開頭作爲該行的註釋。echo 命令能夠將後面的內容打印出來而read命令能夠要求用戶輸入一個數值,而shell會默認的將該數值賦給變量Name,在下文我將進行詳細的闡述。
2.變量的概念
在上面的示例中我們提到了變量的概念,那變量到底是什麼呢?變量實際上是指可利用的內存空間,它限制了數據存儲的格式和數據的表示範圍。在shell中變量主要有以下幾種:
本地變量:只對當前shell進程有效。 定義方式: [set] VAR_Name=value 其中set可以省略。
局部變量:只在局部程序內有效。 定義方式: local VAR_Name=value
環境變量:對當前shell及其子shell有效。 定義方式: export VAR_Name=value
當然系統中還默認有許多環境變量,我們可以通過 env 在命令行界面下查看。而要查看當前shell中所有的變量,我們可以使用 set 命令。
位置變量:$0 $1 $2 ...
$0 默認情況下表示當前的shell,如果在腳本中執行能夠輸出當前腳本名稱。
$1,$2... 表示位置變量,能夠輸出所在位置中變量的值
特殊變量:$? $$ $# $@ $* ...
$? 表示當前環境中命令執行的返回狀態
$$ 表示當前shell的進程ID
$# 表示當前環境中位置變量的個數
$@,$* 能夠打印出當前環境中位置變量的內容
在shell環境中我們可以通過 unset 命令對定義的變量進行撤銷。
3.變量的相關聲明
bash實際上是一種交互式的接口,同時也提供了相關的編程環境;bash提供的是一種弱類型的語言,它不強制區分變量類型,無論存儲什麼數據,默認均以字符格式存儲。在使用變量的過程中我們不需要事先聲明。用到時直接賦值即可。但是在一定的環境中我們也可以對其進行聲明。在bash中我們通常使用declare命令,格式如下:
declare -i VAR_Name 聲明一個整形變量 declare -a VAR_Name 聲明一個數組 declare -x VAR_Name 聲明一個環境變量 declare -r VAR_Name 將變量聲明爲只讀(readonly)
4.變量的引用
格式如下:
${VAR_Name} $加上一個大括號,中間引用變量名
有的時候我們需要在輸入的語句中引用變量的值,這個時候我們爲保證得到的是變量值通常在引用的時候加上雙引號。在shell中,雙引號引用被稱爲弱引用,可以實現變量值的正常替換,而單引號引用被稱爲強引用,引號的內容原樣輸出,在某些時候我們需要在腳本中引用某些命令的執行結果,這個時候我們會使用反引號。以上就是引號在shell腳本中的相關作用。希望大家在使用的過程中不要混淆。
有的時候我們在腳本的編寫過程會用到數組,但不是很常用。在這裏我做一下簡單的介紹:
XX=(aa bb cc dd) #定義一個屬組XX echo ${XX[2]} #輸出數組中下標爲2的數組元素的值,這裏爲cc echo ${XX[*]} #將屬組中所有的元素打印出來 echo ${XX[@]} #效果和 echo ${xx[*]} 相同 echo ${!XX[@]} #打印出數組中所有元素的下標 echo ${#XX[@]} #打印屬組中元素個數
5.shell腳本語法檢查與調試
可以通過bash進行,語法格式如下:
bash -n *.sh #檢查腳本中的語法錯誤(不真正執行腳本) bash -x *.sh #調試執行腳本
6.算術運算
注意:shell不支持浮點數,計算結果中的浮點數默認的會被圓整爲整數。
算術運算的實現方式(有以下4種):
$[expression] C=$[$A+$B]
$((expression)) C=$(($A-$B))
let expression let C=$A*$B
expr expression C=`expr $A / $B`
示例:聲明2個變量Num1和Num2,用四種方式打印出他們之間的和。
#!/bin/bash Num1=13 Num2=7 let C=$Num1+$Num2 echo "$Num1+$Num2=$[$Num1+$Num2]" echo "$Num1+$Num2=$(($Num1+$Num2))" echo "$Num1+$Num2=$C" echo "$Num1+$Num2=`expr $Num1 + $Num2`"
7.條件測試與判斷
1.整數測試
expression [ 數值1 比較符號 數值2 ]
比較符號 | 含義 |
-gt | 大於 |
-ge | 大於或等於 |
-eq | 等於 |
-lt | 小於 |
-le | 小於或等於 |
-ne | 不等於 |
2.字符測試
expression [ 數值1 比較符號 數值2 ]
比較符號 | 含義 |
> | 大於 |
< | 小於 |
== | 等於 |
=~ | 模式匹配 |
-z $string | 判斷是否爲空 |
-n $string | 判斷是否不空 |
3.組合測試條件
條件 | 符號 | 命令連接 |
與 | -a | && |
或 | -o | || |
非 | ! | ! |