什麼是shell腳本(shell script)
簡單來說就是將在Linux中命令行整合成一個程序,這就是shell script
如何使用shell script
first step:開始編輯shell script
有多種編譯方式,這裏我們可以使用vim來編輯
vi filename
second step: 進入編輯器
在編輯器中,我們可以使用i來開始編輯,用 :wq 來保存並退出,不想保存時可以用 :q 直接退出。
#!/bin/bash
我們使用以上代碼段開頭來表示編譯器的選擇,不可缺少。
third step: 開始輸入你要做的內容
forth step: 如何運行
首先先進行編譯
>>sudo chmod u+x filename.sh
編譯成功後,使用ls你會發現文件名被高亮。 之後我們可以通過./來進行運行
>>./filename.sh par1 par2
par1代表傳入參數1,par2代表傳入參數2,…以此類推,可以傳多個參數
下面補充一些常用的小Tips
簡單介紹一下
- 賦值採用
var_name=…
var_name可以隨意你定,注意等號前不要跟空格
如果有var=var+1之類的寫法,會報錯,應該寫爲
let var=var+1
- for循環
基本框架
for var in array#var爲你要遍歷的東西,array爲你要遍歷的範圍,用法類似於python
do
if ...
then
...
else
...
fi
done
- 函數用法
#函數定義
function function_name(){
...
#函數遞歸調用:par1爲參數1,par2爲參數2
function_name par1 par2 ...
...
}
#函數調用:par1爲參數1,par2爲參數2
function_name par1 par2 ...
- 符號介紹
“ * ”表示通配符,用於匹配字符串將被刪除的字串。
“.”表示字符串中分隔符,可以爲任意一個或 多個字符。
“%”表示從右向左匹配,
“#”表示從左向右匹配,
“ \ ”表示替換,都屬於非貪婪匹配,即匹配符合通配符的最短結果。
與“%”、“#”和“/”
類似的有“%%”、“##”和“//”,都屬於貪婪匹配,即匹配符合通配符的最長結果。
舉幾個栗子哈:
#刪除VALUE字符串中以分隔符“.”匹配的右邊字符,保留左邊字符。
${VAR%.*}或${VAR%%.*}
#VAR代表變量名,%代表從右往左匹配,“.*"表示刪除"."後面的字符。而外部的${}代表取值
#刪除VALUE字符串中以分隔符“.”匹配的左邊字符,保留右邊字符。
${VALUE#*.}或${VALUE##*.}:
#VAR代表變量名,%代表從右往左匹配,“.*"表示刪除"."後面的字符。而外部的${}代表取值
${VALUE/OLD/NEW}或${VALUE//OLD/NEW}
補充:${#VALUE}:計算VALUE字符串的字符數量。
- 參數的使用
使用shell腳本的時候,我們可以傳入一些參數進去。
>>./filename.sh par1 par2 ...
其中par1代表的是參數1,par2是參數2,那在shell腳本內,我們該怎麼調用呢?
echo $1 #表示輸出參數1
echo $2 #表示輸出參數2
....
這裏大家應該比較清楚了,$1代表的是參數一。$2代表的是參數2…以此類推
- 變量的使用
shell裏的變量的使用方法比較類似於Python,在使用時不需要聲明類型。
比如我們要定義一個目錄爲pDir目錄下的文件file,我們可以這麼寫
#假設pDir="/home",file=filename
dir=$pDir"/"$file
這段代碼將dir賦值爲file的路徑。此時dir的值爲“/home/filename"。
這裏我們使用用**$**表示取值。
我們可以嘗試另一段代碼感受一下
#假設pDir="/home",file=filename
dir=pDir"/"file
此時dir的值將被定義爲"pDir/file"
這樣大家應該能感受到以下幾點
1. 變量類型無需聲明,直接使用varname=value這樣的賦值即可。
2. varname作爲參數時,(如echo varname)將被解析爲一個字符串如(”varname")
3. 當我們想要得到value時,我們需要echo $varname,使用 "$"符號進行取值
這篇博客差不多就寫到這拉,算是個入門的大雜燴,想要系統的學習還是需要花很多時間的
有問題歡迎google,或者留言聯繫。
附上一些較好的參考博客:
shell變量、賦值和運算
https://www.cnblogs.com/ladawn/p/8412553.html
處理shell腳本輸入參數:
https://www.jianshu.com/p/761b19247979
shell字符串處理技巧:
https://blog.csdn.net/mountaindancer/article/details/78519998
shell echo:
https://blog.csdn.net/vip_wangsai/article/details/72592649
shell 循環:
https://www.cnblogs.com/zhangmingcheng/p/5812750.html
python參數獲得:https://www.cnblogs.com/saiwa/articles/5253713.html