linux中eval命令 linux中eval命令的使用方法

如何利用shell腳本中的eval命令來(lái)構(gòu)造智能命令

今天主要介紹一個(gè)shell腳本中比較少見(jiàn)的命令--eval

創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供鳳縣網(wǎng)站建設(shè)、鳳縣做網(wǎng)站、鳳縣網(wǎng)站設(shè)計(jì)、鳳縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、鳳縣企業(yè)網(wǎng)站模板建站服務(wù),10年鳳縣做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

功能說(shuō)明 :重新運(yùn)算求出參數(shù)的內(nèi)容。

語(yǔ) 法 :eval [參數(shù)]

補(bǔ)充說(shuō)明 :eval可讀取一連串的參數(shù),然后再依參數(shù)本身的特性來(lái)執(zhí)行。

參 數(shù) :參數(shù)不限數(shù)目,彼此之間用分號(hào)分開(kāi)。

eval命令將會(huì)首先掃描命令行進(jìn)行所有的替換,然后再執(zhí)行命令。該命令使用于那些一次掃描無(wú)法實(shí)現(xiàn)其功能的變量。該命令對(duì)變量進(jìn)行兩次掃描。這些需要進(jìn)行兩次掃描的變量有時(shí)候被稱(chēng)為復(fù)雜變量。eval也可以用于回顯簡(jiǎn)單變量,不一定是復(fù)雜變量。

eval的作用是再次執(zhí)行命令行處理,也就是說(shuō),對(duì)一個(gè)命令行,執(zhí)行兩次命令行處理。這個(gè)命令要用好,就要費(fèi)一定的功夫。下面用幾個(gè)例子幫助大家理解下。

1、eval一個(gè)命令

eval echo相當(dāng)于echo

2、兩次掃描

該命令適用于依次掃描無(wú)法完成其功能的變量。

第一步:對(duì)eval后面的命令進(jìn)行掃描,執(zhí)行變量替換,普通命令保留

第二步:執(zhí)行變量替換后的命令串

3、獲得最后一個(gè)參數(shù)

4、用eval技巧實(shí)現(xiàn)shell的控制結(jié)構(gòu)for

用eval技巧實(shí)現(xiàn)shell的控制結(jié)構(gòu)for

輸出結(jié)果:

注意:bash里有兩個(gè)很特殊的變量,它們保存了參數(shù)列表。

這里我使用了函數(shù)遞歸以及eval實(shí)現(xiàn)了for結(jié)構(gòu)。

當(dāng)執(zhí)行eval $@時(shí),它經(jīng)歷了步驟如下:

第1步,分割成eval $@

第6步,擴(kuò)展$@為hostname

第11步,找到內(nèi)置命令eval

重復(fù)一次命令行處理,第11步,找到hostname命令,執(zhí)行。

eval是對(duì)Bash Shell命令行處理規(guī)則的靈活應(yīng)用,進(jìn)而構(gòu)造"智能"命令實(shí)現(xiàn)復(fù)雜的功能。上面提及的命令是eval其中一個(gè)很普通的應(yīng)用,它重復(fù)了1次命令行參數(shù)傳遞過(guò)程,純粹地執(zhí)行命令的命令。其實(shí)它是bash的難點(diǎn),是高級(jí)bash程序員的必修技能。

linux中的命令在shell腳本中怎么寫(xiě)

#!/bin/bash

eval?"cd?/export/songhongwei/code"

eval?"cd?/export/songhongwei/data"

echo?"上面兩行就是在.shell書(shū)寫(xiě)linux命令的方式"

備注:

語(yǔ)法:eval?cmdLine

eval會(huì)對(duì)后面的cmdLine進(jìn)行兩遍掃描,如果第一遍掃描后,cmdLine是個(gè)普通命令,則執(zhí)行此命令;如果cmdLine中含有變量的間接引用,則保證間接引用的語(yǔ)義。

Shell?的?echo?指令與?PHP?的?echo?指令類(lèi)似,都是用于字符串的輸出。

Matlab中eval函數(shù)的使用方法。

1、假如我要對(duì)a1,a2,a3,a4,……,a100分別賦予1,2,3,……,100,這時(shí)eval就發(fā)揮作用了。

for i=1:100

eval(['a'?num2str(i) '='?num2str(i)]);

end

2、再比如批量存數(shù)據(jù)或圖片文件等等。

那么開(kāi)始提到的例子也就好解釋了。

注意:eval中的中括號(hào)在兩個(gè)以上字符串出現(xiàn)時(shí)一定要有,起連接作用。

如:

input:[‘hello’ ‘world’]

output:helloworld

擴(kuò)展資料:

函數(shù)說(shuō)明

eval(expression)在字符串表達(dá)式中評(píng)估MATLAB代碼。如果你在一個(gè)匿名函數(shù)或者含有嵌套函數(shù)的函數(shù)里面使用eval,那么評(píng)估的expression將不能創(chuàng)建一個(gè)變量。

[output1,...,outputN]=eval(expression)?從特定變量表達(dá)式即expression中存儲(chǔ)所有的輸出。

輸入?yún)?shù):

expression:含有有效的MATLAB表達(dá)式的字符串。如果要在表達(dá)式即expression里面包含數(shù)值,請(qǐng)使用int2str,num2str或者sprintf進(jìn)行轉(zhuǎn)換。

輸出參數(shù):

output1,...,outputN:是評(píng)估的表達(dá)式expression中的輸出。

參考資料:百度百科—eval(MATLAB函數(shù))

關(guān)于LINUX代理的問(wèn)題!

分類(lèi): 電腦/網(wǎng)絡(luò) 操作系統(tǒng)/系統(tǒng)故障

問(wèn)題描述:

也許是我的問(wèn)題太菜了

1,做LINUX代理需不需要安裝系統(tǒng)默認(rèn)的防火墻,我看好多貼自上寫(xiě)的都是用NAT轉(zhuǎn)換,我也用NAT但是不知道安裝LINXU做代理的時(shí)候到底要不要安裝防火墻?

2,還是就是做代理在/etc/sysconfig/neork里面

GSTEWAY=里添外網(wǎng)的網(wǎng)關(guān)還是內(nèi)網(wǎng)的

3,在/etc/hosts要不要把所有內(nèi)網(wǎng)的IP都填進(jìn)去,對(duì)速度是不是有提高

解析:

中了ARP病毒,下載一個(gè)最新的殺毒軟件(金山下載地址為:orsoon可以免費(fèi)升級(jí))另外建議買(mǎi)個(gè)MAC 交換機(jī)或者從LINUX代理服務(wù)器里面綁定客戶(hù)機(jī)的MAC地址,具體方法如下:

Linux下使用腳本實(shí)現(xiàn)動(dòng)態(tài)arp綁定

BENET學(xué)術(shù)部

不久前,一位朋友想把他管理的局域網(wǎng)出口全部進(jìn)行IP和MAC地址綁定,以防止非法用戶(hù)上網(wǎng)。該局域網(wǎng)是用Linux實(shí)現(xiàn)Inter接入和管理。整個(gè)網(wǎng)絡(luò)包括數(shù)棟房,分別通過(guò)交換機(jī)級(jí)聯(lián)到總的Inter出口。網(wǎng)絡(luò)使用了10.0.0.x到10.0.3.x/255.255.252.0這樣的子網(wǎng),總?cè)萘繎?yīng)該有1016(254×4)臺(tái)主機(jī)。目前有大約400位合法上網(wǎng)用戶(hù),這些用戶(hù)可能會(huì)隨時(shí)增減。在Linux系統(tǒng)下,想利用MAC原理對(duì)IP進(jìn)行封殺,從而達(dá)到對(duì)某個(gè)IP地址或IP地址段的管理和控制,可以通過(guò)Linux系統(tǒng)提供的ARP來(lái)實(shí)現(xiàn)。

構(gòu)思

決定使用ARP綁定后,接下來(lái)就要考慮ARP的實(shí)現(xiàn)方法。ARP(Address Resolution Protocol)協(xié)議是用來(lái)向?qū)Ψ降挠?jì)算機(jī)、網(wǎng)絡(luò)設(shè)備通知自己IP對(duì)應(yīng)的MAC地址的。如果所有非法用戶(hù)都被賦予了錯(cuò)誤的MAC地址,那么他們是無(wú)法通過(guò)這臺(tái)服務(wù)器上網(wǎng)的。因此,ARP綁定要求必須將所有可能的IP地址全部與MAC地址綁定,才能夠杜絕非法用戶(hù)(當(dāng)然,用戶(hù)修改MAC地址除外)。

經(jīng)過(guò)一番思索,確定了初步的構(gòu)思。首先,用Linux Shell的循環(huán)方法生成一張包含從10.0.0.1到10.0.3.254的無(wú)效MAC地址匹配表,稱(chēng)之為全局表。然后根據(jù)DHCP服務(wù)器的數(shù)據(jù)得到一張合法用戶(hù)的IP和MAC地址表,稱(chēng)之為合法表。接著,讀取合法表中每個(gè)用戶(hù)的IP,并在全局表中尋找匹配的IP,如果找到的話就用合法用戶(hù)的MAC地址替換原來(lái)無(wú)效的MAC地址。最后,這張全局表中的合法用戶(hù)匹配正確MAC地址,而非法用戶(hù)匹配無(wú)效的MAC地址。只要用戶(hù)把這張表寫(xiě)入系統(tǒng)ARP緩存,非法用戶(hù)就不能通過(guò)簡(jiǎn)單的盜取IP方法來(lái)通過(guò)網(wǎng)關(guān)了。

實(shí)現(xiàn)

首先生成一張初始的全局表。它包含所有IP地址,每個(gè)IP地址與一個(gè)非法的MAC地址匹配。它的格式必須是arp命令能夠識(shí)別的。初始化全局表的腳本為init,內(nèi)容如下:

#!/bin/bash

ipprefix=10.0.

count1=0

while (( $count1 4 ))

do

count2=1

while (( $count2 255 ))

do

echo“$ipprefix$count1.$count2 00e***********”

let $count2+=1

done

let $count1+=1

done

寫(xiě)好后存檔,用“chmod +x init”命令使得腳本可執(zhí)行。然后運(yùn)行腳本init arp,就可以將結(jié)果保存到當(dāng)前目錄的arp文件中。該文件就是10.0.0.1到10.0.3.254所有IP地址與MAC地址00e***********綁定的ARP表,看上去該文件類(lèi)似于下面這樣:

10.0.0.1 00e***********

10.0.0.2 00e***********

10.0.0.3 00e***********

10.0.0.4 00e***********

10.0.0.5 00e***********

…… ……

需要注意的是,Shell腳本語(yǔ)法雖然和C語(yǔ)言類(lèi)似,但對(duì)格式要求很?chē)?yán)格,有些地方不能加空格,有些地方則必須加空格。比如let $count1+=1就不能寫(xiě)成let $count1 += 1;相反,while (( $count1 4 )) 也不能寫(xiě)成while (($count14)),括號(hào)與語(yǔ)句之間必需有空格。

接下來(lái)通過(guò)DHCP服務(wù)器得到合法用戶(hù)的IP與MAC地址匹配表(即合法用戶(hù)表),假設(shè)是valid.arp文件。編寫(xiě)一個(gè)腳本一行一行地讀取該表,每得到一個(gè)IP地址記錄,就在前面生成的arp文件中查找同樣的IP.如果找到的話,那么就用valid.arp中該IP的MAC地址替換arp文件中該IP的MAC地址。valid.arp文件可能像下面這樣:

10.0.0.2 00e00a0f1d2c

……

10.0.1.25 00e0b2c3d5c1

……

查找替換腳本為replace,內(nèi)容如下:

#!/bin/bash

# 定義并初始化三個(gè)變量,分別是合法用戶(hù)表、全局表和作交換用的表

validArp=valid.arp

globalArp=arp

tmpArp=tmp.arp

count=1

# 371是合法用戶(hù)的總數(shù),也就是valid.arp表的記錄數(shù),然后加1

while (( count 371 ))

do

#“ sed -n‘”$count“p’$validArp”命令將每次打印valid.arp文件中的第$count個(gè)記錄

# 例如,當(dāng)$count=1的時(shí)候,該命令將打?。?10.0.0.2 00e00a0f1d2c2

# eval $getValid將會(huì)執(zhí)行$getValid變量所包含的語(yǔ)句,并將結(jié)果賦給變量$curRec

getValid=“sed -n‘”$count“p’$validArp”

curRec=‘eval $getValid’

# echo $curRec awk‘{print $1}’命令將打印$curRec內(nèi)容的第一個(gè)字段,也就是IP地址

# 然后我們將這個(gè)IP地址賦值給$curIP變量

getIP=“echo $curRec awk‘{print \$1}’”

curIP=‘eval $getIP’

# 這樣我們就得到了合法用戶(hù)的IP及IP和MAC地址對(duì),接下來(lái)是最關(guān)鍵的一步

# 下面兩條語(yǔ)句在全局表中查找與得到的IP匹配的項(xiàng)目,找到后就在該記錄后面添加合法用戶(hù)的IP

和MAC地址對(duì),然后刪除舊的非法IP和MAC地址對(duì),并將結(jié)果存入一個(gè)新的文件tmp.arp

replace=“sed -e‘/$curIP\/a\ $curRec’ -e‘/$curIP\/d’$globalArp $tmpArp”

eval $replace然后用新的文件覆蓋全局表文件,并將計(jì)數(shù)器加1,供下次循環(huán)

cp -f $tmpArp $globalArp

let count+=1

done

到此腳本結(jié)束。需要注意的地方有兩個(gè):第一,所有包含“eval”命令的語(yǔ)句,使用的都是反引號(hào),也就是通常位于Tab鍵上面的那個(gè)引號(hào),這樣變量才能得到語(yǔ)句執(zhí)行的結(jié)果,而非語(yǔ)句本身;第二,如果出現(xiàn)變量和其它字母在一起的情況,用雙引號(hào)將變量包含,否則會(huì)出現(xiàn)錯(cuò)誤的變量名,例如下面這條語(yǔ)句:

getValid=“sed -n‘”$count“p’$validArp”

如果不用雙引號(hào)把變量$count包起來(lái),Shell會(huì)認(rèn)為用戶(hù)的變量是$countp,而不是$count.

在執(zhí)行完replace后,再查看arp文件,會(huì)發(fā)現(xiàn)其中所有在valid.arp文件中存在的IP和MAC地址對(duì),其中的初始化MAC地址已被替換為正確的MAC地址。

最后,將得到的arp文件拷貝為/etc/ethers,在系統(tǒng)啟動(dòng)時(shí)運(yùn)行“arp -f”,就可以實(shí)現(xiàn)IP和MAC地址匹配了。

總結(jié)

通過(guò)這件事不難發(fā)現(xiàn),Linux繼承了Unix的優(yōu)秀傳統(tǒng),具備強(qiáng)大和完善的系統(tǒng)管理方法。只要用戶(hù)掌握一些常用的命令與工具,就可以極大地提高系統(tǒng)管理效率,降低管理的工作強(qiáng)度。學(xué)習(xí)和掌握這些方法,是每個(gè)合格的Linux系統(tǒng)管理員都應(yīng)該做到的。

網(wǎng)頁(yè)題目:linux中eval命令 linux中eval命令的使用方法
文章來(lái)源:http://muchs.cn/article30/doeihpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序建站公司網(wǎng)站策劃、標(biāo)簽優(yōu)化、云服務(wù)器、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)