Shell 腳本(shell script),是一種爲 shell 編寫的腳本程序。html
1.先導知識linux
變量知識補充:http://www.javashuo.com/article/p-qpvrlpad-bo.htmlshell
必備先導知識:###來自鳥哥私房菜編程
1. 指令的執行是從上而下、從左而右的分析與執行;
2. 指令的下達就如同第四章內提到的: 指令、選項與參數間的多個空白都會被忽略掉;
3. 空白行也將被忽略掉,而且 [tab] 按鍵所推開的空白一樣視爲空白鍵;
4. 若是讀取到一個 Enter 符號 (CR) ,就嘗試開始執行該行 (或該串) 命令;
5. 至於若是一行的內容太多,則可使用「 [Enter] 」來延伸至下一行;
6. 「 # 」可作爲註解!任何加在 # 後面的數據將所有被視爲註解文字而被忽略!
常見執行腳本的方法:vim
chmod +x ./test.sh #使腳本具備執行權限數組
絕對路徑:使用 /home/dmtsai/shell.sh 來下達指令;
相對路徑:假設工做目錄在 /home/dmtsai/ ,則使用 ./shell.sh 來執行 ###若是直接寫shell.sh須要PATH中包含此目錄!
變量「PATH」功能:將 shell.sh 放在 PATH 指定的目錄內,例如: ~/bin/
使用set命令能夠查看全部變量bash
2.第一個shell script——hello worldide
#!/bin/bash # my first shell script echo "hello world"
#! 是一個約定的標記,它告訴系統這個腳本須要什麼解釋器來執行,即便用哪種 Shell。 # 是註釋的標記 最後一行爲正文
依次使用如下指令:spa
// 複習 chmod的使用!.net
在介紹完hello world後,分享鳥哥的shell編寫建議:——相似編程規範,請儘可能遵照!
另外,在一些環境的設置上面,畢竟每一個人的環境都不相同,爲了取得較佳的執行環境, 我
都會自行先定義好一些必定會被用到的環境變量,例如 PATH 這個玩意兒! 這樣比較好啦~
因此說,建議你必定要養成良好的 script 撰寫習慣,在每一個 script 的文件開始處記錄好:
script 的功能;
script 的版本信息;
script 的做者與聯絡方式;
script 的版權宣告方式;
script 的 History (歷史紀錄);
script 內較特殊的指令,使用「絕對路徑」的方式來下達;
script 運行時須要的環境變量預先宣告與設置。
TIPS:sh文件後綴並非必須的(前面咱們有提到過linux不之後綴區分文件類型),只是習慣上,咱們以sh爲後綴!
#!/bin/bash # Program: # This program shows the user's choice
# History: # 2015/07/16 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH
1.對談式腳本——read命令的使用:read
由用戶輸入first name與 last name,程序輸出 full name
#!/bin/bash #function: # input first-name and last-name,output the full-name #author: # zcc on 2017/12/14 read -p "please input your first name" firstname read -p "please input your last name" lastname echo -e "your first name is ${firstname} ,last name is ${lastname}"
執行:
root@ccc:/tmp# chmod +x showname.sh root@ccc:/tmp# ./showname.sh please input your first namejiangbei please input your last namez your first name is jiangbei ,last name is z
2.日期式腳本——date的使用:date
由用戶輸入文件名,建立3個文件,文件名爲用戶輸入+近3天日期
vim create_3_filename.sh
#頭部省略,請自行思考如何補充(包括使用規範)
read -p "please input the filename:" fileuser #use the var syntax filename=${fileuser:-"filename"} date1=$(date -d "+1 day" +%Y%m%d) date2=$(date +%Y%m%d) date3=$(date -d "-1 day" +%Y%m%d) file1=${filename}${date1} file2=${filename}${date2} file3=${filename}${date3} touch "${file1}" touch "${file2}" touch "${file3}"
chmod u+x create_3_filename.sh
複習以前變量的用法,例如使用$()等!
執行結果以下:
3.數值運算
更多數值計算,參考:http://www.mamicode.com/info-detail-1324934.html
輸入兩個數,輸出相加結果:
1 #!/bin/bash 2 #function: 3 # add 2 numbers 4 #author: 5 # jiangbei on 2017/12/15
6 read -p "input the first number:" first 7 read -p "input the second number:" second 8 total=$((${first}+${second})) 9 echo -e "the total is ${total}"
其餘與上文重複過程省略,基本上,數值運算可使用如下兩種方式:
declare -i total=${firstnu}*${secnu}
var=$((運算內容)) ###注意爲兩個括號!
固然,以上只是整數運算,若是須要支持小數,能夠經過bc來進行:
echo "123.123*55.9" | bc
補充:腳本執行方式的差別
有了一點腳本的基礎後,咱們來看執行方式的差別:
當使用前一小節提到的直接指令下達 (不管是絕對路徑/相對路徑仍是 ${PATH} 內),或者是 利用 bash (或 sh) 來下達腳本時, 該 script 都會使用一個新的 bash 環境來執行腳本內的 指令!也就是說,使用這種執行方式時, 其實 script 是在子程序的 bash 內執行的!咱們在 第十章 BASH 內談到 export 的功能時,曾經就父程序/子程序談過一些概念性的問題, 重點 在於:「當子程序完成後,在子程序內的各項變量或動做將會結束而不會傳回到父程序中」!
因此,以前的./xx.sh是另外起的一支子程序,其中的數據在執行結束後將會被抹去,若是想要保留,能夠經過如下的方式:
使用 source命令:source showname.sh
showname.sh
會在父程序中執行的,所以各項動做都會在本來的 bash 內生效!
這也是爲啥你不登出系統而要讓某些寫入 ~/.bashrc 的設置生效時,
須要使用「 source ~/.bashrc 」而不能使用「 bash ~/.bashrc 」是同樣的啊!
更多請參考:http://blog.csdn.net/violet_echo_0908/article/details/52056071
支持整形、字符串以及一維數組
#字符串,單雙引號見參考連接 your_name='qinjx' #數組 array_name=(value0 value1 value2 value3)
#數組的下標能夠不連續,shell屬於弱類型 array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
完整介紹,參考菜鳥教程:http://www.runoob.com/linux/linux-shell-variable.html
更多數據類型介紹,參考:http://blog.csdn.net/a1055186977/article/details/71402758