1.Shell
成都創(chuàng)新互聯(lián)服務(wù)項目包括東源網(wǎng)站建設(shè)、東源網(wǎng)站制作、東源網(wǎng)頁制作以及東源網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,東源網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到東源省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Shell的作用是解釋執(zhí)行用戶的命令,用戶輸入一條命令,Shell就解釋執(zhí)行一條,這種方式
稱為交互式(Interactive),Shell還有一種執(zhí)行命令的方式稱為批處理(Batch),用戶事先寫一 個Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執(zhí)行完,而不必一條
一條地敲命令。Shell腳本和編程語言很相似,也有變量和流程控制語句,但Shell腳本是解釋
執(zhí)行的,不需要編譯,Shell程序從腳本中一行一行讀取并執(zhí)行這些命令,相當(dāng)于一個用戶把
腳本中的命令一行一 行敲到Shell提示符下執(zhí)行。
shell腳本是一個文本文件,不能被操作系統(tǒng)識別,但是可以執(zhí)行,是因為有中間解釋器。
運行shell腳本時先加載解釋器,解釋器讀取文本參數(shù)進行運行。
shell運行原理:
1.命令中轉(zhuǎn)(創(chuàng)建子進程,分析執(zhí)行,返回結(jié)果)
2.創(chuàng)建進程完成任務(wù)
3.父進程不受子進程錯誤影響
運行過程
test.sh將其內(nèi)容以命令行參數(shù)傳遞給子bash,子bash再fork孫bash執(zhí)行命令,將結(jié)果返回給子bash。
shell腳本:
1 #!/bin/bash
2
3 echo "hello bit"
在腳本中第一行必須為:告知解釋器及版本,#!
運行shell腳本的方法:
1> bash或sh+文件名.sh
2>/bin/bash或sh+文件名.sh
3>chmod u+x test.sh 后直接運行./test.sh
cd與export 是比較特殊的命令,不會創(chuàng)建子進程,直接在當(dāng)前環(huán)境下運行,這類命令被稱為內(nèi)置命令。
舉個例子:
1 #!/bin/bash
4 sleep 1
5 pwd
6 sleep 1
7 cd ..
8 sleep 1
9 pwd
10
每隔一秒依次執(zhí)行命令
結(jié)果:
還有一個 .表示當(dāng)前路徑,由當(dāng)前的bash解釋命令。
2.shell變量可以分為環(huán)境變量和本地變量
環(huán)境變量可以從父進程傳給子進程,本地變量只存在于當(dāng)前shell進程。
printenv顯示環(huán)境變量,set設(shè)置本地變量和環(huán)境變量,環(huán)境變量是任何進程都有的,而本地變量是shell特有的。
3.eval
eval命令將會首先掃描命令行進行所有的置換,然后再執(zhí)行該命令。該命令適用于那些一次掃描無法實現(xiàn)其功能的變量。該命令對變量進行兩次掃描。這些需要進行兩次掃描的變量有時被稱為復(fù)雜變量。不過這些變量本身并不復(fù)雜。e v a l命令也可以用于回顯簡單變量,不一定是復(fù)雜變量。
例子:
1>顯示test.sh內(nèi)容
從結(jié)果看出使用eval命令不但可以置換該變量,還能夠執(zhí)行相應(yīng)的命令。第一次掃描進行了file變量置換,第二次掃描執(zhí)行了該字符串中所包含的命令cat test.sh。
2>還可以用來顯示出傳遞給腳本的最后一個參數(shù)
在test.sh 腳本中寫入 eval echo \$$#, 運行test.sh。結(jié)果如下:
3>.給每個值一個變量名
希望一個文件中的第一列成為變量名,第二列成為該變量的值
打開一個test寫入
name dandan
age 21
在file.sh中寫入
1 #!/bin/bash
2
3 while read NAME VALUE
4 do
5 eval "${NAME}=${VALUE}"
6 done <test
7 echo "$name $age"
運行file.sh,結(jié)果如下:
4>用eval命令創(chuàng)建指向變量的“指針"
4. ``與$()的區(qū)別和聯(lián)系
舉一個例子:
1. 1 #!/bin/bash
2
3 echo `echo \$HOSTNAME`
4 echo $(echo \$HOSTNAME)
我們可以使用sh -x test.sh來分析bash是如何來解釋這個腳本的,返回的信息如下:
1>反引號中\(zhòng)$并沒有將$的特殊意義轉(zhuǎn)換 反引號包含的內(nèi)容 echo \$hostname 仍然被解釋
為一個echo $HOSTNAME 取到了這個變量的值并輸出所以反引號返回的值為 localhost
2>$()則正好相反,$明顯被\轉(zhuǎn)義成了一個普通字符,所以并沒有取到變量值,而是返回了
字符串本身的意思,故而返回了$HOSTNAME。
這說明反引號對反斜杠(\)有特殊的轉(zhuǎn)化,至少我們看到當(dāng)我們直接用1個\時,它本身
并不會起到轉(zhuǎn)義的作用。
2.再給程序中多加一個\,運行結(jié)果:
這次結(jié)果與上次運行結(jié)果差不多正好相反。
反引號反而輸出了$HOSTNAME的字面意思
$()如我們所愿的取到了變量值,并理所應(yīng)當(dāng)?shù)妮敵隽艘粋€被轉(zhuǎn)義的字符串\
3.若將代碼改為
echo `echo \\\\`
echo $(echo \\\\)
運行結(jié)果:
4.若將代碼改為
echo `echo \\\\\\\\`
echo $(echo \\\\\\\\)
運行結(jié)果:
由以上測試得出結(jié)論:
反引號其本身就對\進行了轉(zhuǎn)義,保留了其本身意思,如果我們想在反引號中起到\的特殊意義,我們必須使用2個\來進行表示。
所以我們可以簡單的想象成反引號中: \\ = \
$()中則不需要考慮\的問題,與我們平常使用的一樣:\ = \
不過一般情況下使用$()。
5.crond定時任務(wù)
crond 是linux用來定期執(zhí)行程序的命令。當(dāng)安裝完成操作系統(tǒng)之后,默認(rèn)便會啟動此任務(wù)調(diào)度命令。crond命令每分鍾會定期檢查是否有要執(zhí)行的工作,如果有要執(zhí)行的工作便會自動執(zhí)行該工作。而linux任務(wù)調(diào)度的工作主要分為以下兩類:
1、系統(tǒng)執(zhí)行的工作:系統(tǒng)周期性所要執(zhí)行的工作,如備份系統(tǒng)數(shù)據(jù)、清理緩存
2、個人執(zhí)行的工作:某個用戶定期要做的工作,例如每隔10分鐘檢查郵件服務(wù)器是否有新信,這些工作可由每個用戶自行設(shè)置
分享文章:shell腳本知識
URL網(wǎng)址:http://aaarwkj.com/article46/godchg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、外貿(mào)建站、網(wǎng)站內(nèi)鏈、商城網(wǎng)站、網(wǎng)站改版、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)