shell編程規(guī)范與變量詳解
shell腳本概述
shell可以批量處理,自動(dòng)化完成一系列維護(hù)任務(wù),避免大量重復(fù)性輸入,交互操作等。
shell作用
shell是一個(gè)特殊的應(yīng)用程序(在linux中),介于操作系統(tǒng)內(nèi)核與用戶之間,擔(dān)任’命令解釋器‘的角色,主要負(fù)責(zé)用戶輸入命令(解釋),將需進(jìn)行的操作傳遞給內(nèi)核(輸出結(jié)果)。
shell解釋器有很多種,使用不同的shell時(shí),其內(nèi)部的指令,特殊符號(hào)會(huì)有區(qū)別。
編寫第一個(gè)shell腳本
bash是目前使用最多(linux默認(rèn))的shell。shell腳本將要執(zhí)行的命令放入一個(gè)腳本中,賦予其權(quán)限即可。
執(zhí)行vim aaa.sh構(gòu)建并編輯腳本
如要執(zhí)行./aaa.sh需賦予權(quán)限。(bash ,source則無需)
執(zhí)行腳本
重定向與管道操作
shell腳本具有批量處理的特性,大部分指令都是默認(rèn)進(jìn)行,因此提取,過濾執(zhí)行信息非常重要。
重定向操作
linux系統(tǒng)使用文件來描述硬件設(shè)備等資源(硬板,分區(qū)等設(shè)備文件),用戶提供操作系統(tǒng)處理的信息過程中,主要包括3類交互設(shè)備文件。
默認(rèn)設(shè)備 | 文件編號(hào) | ||
標(biāo)準(zhǔn)輸入 | 鍵盤 | 0 | 命令將從標(biāo)準(zhǔn)輸入文件中讀取在執(zhí)行過程中需要輸入的數(shù)據(jù)。 |
標(biāo)準(zhǔn)輸出 | 顯示器 | 1 | 命令將執(zhí)行后的輸出結(jié)果發(fā)送到輸出文件 |
標(biāo)準(zhǔn)錯(cuò)誤 | 顯示器 | 2 | 命令將執(zhí)行時(shí)的各種錯(cuò)誤信息發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤文件 |
重定向輸出
是指將命令的正常輸出結(jié)果保存到指定文件中(不顯示在顯示的屏幕上)(>/>>用于覆蓋和追加文件)。
重定向輸入
指將命令在接收接受的途徑由默認(rèn)改成指定文件,不等待從鍵盤輸入。
交互式操作過程可以通過重定向輸入以讀取文件的方式來完成。
執(zhí)行添加初始密碼串“123456”
非交互式命令語句可以更方便的在Shell腳本中使用,從而大大減少程序被打斷的過程,提高腳本執(zhí)行的效率。
錯(cuò)誤重定向
將執(zhí)行命令時(shí)的錯(cuò)誤信息保存到指定文件上而不是屏幕上。
管道操作
管道操作為不同命令之間提供了一種機(jī)制。位于|左側(cè)命令作為輸出結(jié)果,將右側(cè)命令作為輸入(處理對(duì)象),一行命令可以有多個(gè)|符。
shell變量作用,類型
shell變量用來存放系統(tǒng)和用戶需要使用的特定參數(shù),這些參數(shù)可以根據(jù)用戶的設(shè)定或系統(tǒng)變化而相應(yīng)變化,shell程序能夠提供更加靈活功能,適應(yīng)性更強(qiáng)。
自定義變量
自定義變量是由系統(tǒng)用戶自己定義的變量,只在用戶自己的Shell環(huán)境中有效,因此又稱為本地變量。
定義新變量
bash中變量相對(duì)簡單沒有那么復(fù)雜,在定義一個(gè)新變量時(shí),一般無需提前聲明,直接指定變量名稱給初始值即可(內(nèi)容)。
查看引用變量值
在變量前加$可以引用一個(gè)變量值,使用echo查看變量,一條命令可以使用echo查看多個(gè)變量值。
當(dāng)變量名稱和緊跟其他的其他字符混淆時(shí),使用{}將其隔開,否則將無法確定正確的變量名稱。
變量賦值特殊操作
雙引號(hào)(")
雙引號(hào)起界定字符串的作用,特別是當(dāng)賦值內(nèi)容包括空格時(shí),必須用"括起來,其他情況下"可以省略。
在"范圍內(nèi)使用$可以引用其他變量值(變量引用),從而能夠直接調(diào)用現(xiàn)有變量的值給新的變量。
單引號(hào)(‘)
當(dāng)賦值包括/$等特殊符號(hào)時(shí),應(yīng)用單引號(hào)括起來。在單引號(hào)范圍內(nèi)任何字符都將被當(dāng)作普通字符看待,而且無法引用其他變量的值。
反撇號(hào)(`)
主要用于命令替換,允許將執(zhí)行某個(gè)命令的屏幕輸出結(jié)果賦值給變量。`號(hào)內(nèi)必須是可以執(zhí)行的命令,不然將會(huì)出錯(cuò)。
使用反撇號(hào)難以在一行命令中實(shí)現(xiàn)嵌套命令替換操作,這時(shí)可以己使用"$()"來代替`號(hào)操作,以解決嵌套的問題。
read命令
bash內(nèi)置命令可以使用read來變量賦值。read命令用來提示用戶輸入信息,從而實(shí)現(xiàn)簡單的交互過程。
[root@localhost~]# read ToDir1 /opt/backup/ [root@localhost ~]# echo $ToDir1 /opt/backup/
以便使交互式操作界面更加友好,提高易用性,read命令可以結(jié)合"-p'選項(xiàng)來設(shè)置提示信息,以便告知用戶應(yīng)該輸入什么內(nèi)容等相關(guān)事項(xiàng)。
[root@localhost~]#read-p"請指定備份存放目錄:"ToDir22 請指定備份存放目錄:/opt/backup [root@localhost ~]#_echo $ToDir2 /opt/backup
設(shè)置變量作用范圍
默認(rèn)情況下,新定義的變量只在當(dāng)前的Shell環(huán)境中有效,因此稱為局部變量。當(dāng)進(jìn)入子程序或新的子shell環(huán)境式,局部將無法再使用。
為了使用戶定義的變量在所有的子Shell環(huán)境中能夠繼續(xù)使用,減少重復(fù)設(shè)置工作,可以通過內(nèi)部,命令export將指定的變量導(dǎo)出為全局變量。
使用export導(dǎo)出全局變量的同時(shí),也可以為變量進(jìn)行賦值,這樣在新定義全局變量時(shí)就不需要提前進(jìn)行賦值了。
數(shù)值變量運(yùn)算
Shell變量的數(shù)值運(yùn)算多用于腳本程序的過程控制。
- +加法運(yùn)算。
- -:減法運(yùn)算。
- \*:乘法運(yùn)算,注意不能僅使用"*"符號(hào),否則將被當(dāng)成文文件通配符
- /:除法運(yùn)算。
- %:求模運(yùn)算,又稱為取余運(yùn)算,用來計(jì)算數(shù)值相除后的余數(shù)。
若要將運(yùn)算結(jié)果賦值給其他變量,可以結(jié)合命令替換操作(使用反撇號(hào))。
特殊shell設(shè)置
除了用戶自行定義的Shell變量以外,在Linux系統(tǒng)和Bash Shell環(huán)境中還有一系列的特殊變量:環(huán)境變量,只讀變量,位置變量,預(yù)定義變量。
環(huán)境變量
環(huán)境變量指的是出于運(yùn)行需要而由Linux系統(tǒng)提前創(chuàng)建的一類變量,主要用于設(shè)置用戶的工作環(huán)境,,包括用戶宿主目錄,命令查找路徑,用戶當(dāng)前目錄,登錄終端等。
PATH變量用于設(shè)置可執(zhí)行程序的默認(rèn)搜索路徑,當(dāng)僅指定文件名稱來執(zhí)行命令程序時(shí),Linux系統(tǒng)
將在PATH變量指定的目錄范圍查找對(duì)應(yīng)的可執(zhí)行文件,如果找不到則會(huì)提示"command not found"
[root@localhost ~]# ls -lh /root/first.sh -rwxr-xr-x. 1 root root 27 Jul 4 09:24 /root/first.sh [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bi n:/root/bin [root@localhost ~]#first.sh -bash: first.sh: command not found [root@localhost ~]#_PATH="$PATH:/root" [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/birh:/root/bin:/usr/local/mysql/bi n:/root/bin:/root [root@localhost~]#first.sh//直接以文件名運(yùn)行腳本 當(dāng)前的目錄位于: /boot 其中以vml開頭的文件包括:-rwxr-xr-x.1root5.2M Apr 12 13:20 vmlinuz-0-rescue-b15df1eb8205483f9f70c779709810abc -rwxr-xr-x. 1 root root 5.2M Nov 22 2016 vmlinuz-3.10.0-514.el7.x86_64
只讀變量
Shell變量中有一種特殊情況,一經(jīng)設(shè)定,其值是不可改變的,這種變量被稱為只讀變量。
位置變量
為了在使用Shell腳本程序時(shí),方便通過命令行,為程序提供操作參數(shù),Bash引入了位置變量的概念。
執(zhí)行vim adder2num.sh
[root@localhost ~]# ./adder2num.sh 12 34 12 + 34=46 [root@localhost ~]# ./adder2num.sh 56 78 56 + 78 =134
預(yù)定義變量
預(yù)定義變量是由Bash程序預(yù)先定義好的一類特殊變量,用戶只能使用預(yù)定義變量,而不能創(chuàng)建新的預(yù)定義變量。
- $#:表示命令行中位置參數(shù)的個(gè)數(shù)。
- $*:表示所有位置參數(shù)的內(nèi)容。
- $?:表示前一條命令執(zhí)行后的返回狀態(tài),返回值為0表示執(zhí)行正確,返回任何非0值均表示執(zhí)行出現(xiàn)異常。
- $0:表示當(dāng)前執(zhí)行的腳本或程序的名稱。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Apache中使非偽靜態(tài)url跳轉(zhuǎn)到偽靜態(tài)url的方法
這篇文章主要介紹了Apache中使非偽靜態(tài)url跳轉(zhuǎn)到偽靜態(tài)url的方法,主要是在使用.htaccess時(shí)的問題,需要的朋友可以參考下2015-07-07apache中偽靜態(tài)配置和使用(Apache虛擬主機(jī)下Discuz偽靜態(tài))
apache中偽靜態(tài)配置和使用(Apache虛擬主機(jī)下Discuz偽靜態(tài)),需要的朋友可以參考下。2012-01-01Linux下模擬http的get/post請求(curl or wget)詳解
這篇文章主要介紹了Linux下模擬http的get/post請求(curl or wget)詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05在Ubuntu中如何查看網(wǎng)絡(luò)路由表詳解
這篇文章主要給大家介紹了關(guān)于在Ubuntu中如何查看網(wǎng)絡(luò)路由表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ubuntu具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12在CentOS7上搭建Jenkins+Maven+Git持續(xù)集成環(huán)境的方法
這篇文章主要介紹了在CentOS7上搭建Jenkins+Maven+Git持續(xù)集成環(huán)境的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01在Linux系統(tǒng)下上傳項(xiàng)目到碼云的方法
今天小編就為大家分享一篇關(guān)于在Linux系統(tǒng)下上傳項(xiàng)目到碼云的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10Ubuntu18.04安裝Nvidia顯卡驅(qū)動(dòng)教程(圖文)
這篇文章主要介紹了Ubuntu18.04安裝Nvidia顯卡驅(qū)動(dòng)教程(圖文),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07如何查看Apache的連接數(shù)和當(dāng)前連接數(shù)
查看Apache的連接數(shù)和當(dāng)前的連接數(shù)以及IP訪問次數(shù),下面有個(gè)不錯(cuò)的示例,大家可以參考下,希望對(duì)大家解決問題有所幫助2014-01-01