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

如何利用shell脚本中的eval命令来构造智能命令

今天主要介绍一个shell脚本中比较少见的命令--eval

创新互联公司专业为企业提供凤县网站建设、凤县做网站、凤县网站设计、凤县网站制作等企业网站建设、网页设计与制作、凤县企业网站模板建站服务,10年凤县做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

功能说明 :重新运算求出参数的内容。

语 法 :eval [参数]

补充说明 :eval可读取一连串的参数,然后再依参数本身的特性来执行。

参 数 :参数不限数目,彼此之间用分号分开。

eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。eval也可以用于回显简单变量,不一定是复杂变量。

eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。这个命令要用好,就要费一定的功夫。下面用几个例子帮助大家理解下。

1、eval一个命令

eval echo相当于echo

2、两次扫描

该命令适用于依次扫描无法完成其功能的变量。

第一步:对eval后面的命令进行扫描,执行变量替换,普通命令保留

第二步:执行变量替换后的命令串

3、获得最后一个参数

4、用eval技巧实现shell的控制结构for

用eval技巧实现shell的控制结构for

输出结果:

注意:bash里有两个很特殊的变量,它们保存了参数列表。

这里我使用了函数递归以及eval实现了for结构。

当执行eval $@时,它经历了步骤如下:

第1步,分割成eval $@

第6步,扩展$@为hostname

第11步,找到内置命令eval

重复一次命令行处理,第11步,找到hostname命令,执行。

eval是对Bash Shell命令行处理规则的灵活应用,进而构造"智能"命令实现复杂的功能。上面提及的命令是eval其中一个很普通的应用,它重复了1次命令行参数传递过程,纯粹地执行命令的命令。其实它是bash的难点,是高级bash程序员的必修技能。

linux中的命令在shell脚本中怎么写

#!/bin/bash

eval "cd /export/songhongwei/code"

eval "cd /export/songhongwei/data"

echo "上面两行就是在.shell书写linux命令的方式"

备注:

语法:eval cmdLine

eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证间接引用的语义。

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。

Matlab中eval函数的使用方法。

1、假如我要对a1,a2,a3,a4,……,a100分别赋予1,2,3,……,100,这时eval就发挥作用了。

for i=1:100

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

end

2、再比如批量存数据或图片文件等等。

那么开始提到的例子也就好解释了。

注意:eval中的中括号在两个以上字符串出现时一定要有,起连接作用。

如:

input:[‘hello’ ‘world’]

output:helloworld

扩展资料:

函数说明

eval(expression)在字符串表达式中评估MATLAB代码。如果你在一个匿名函数或者含有嵌套函数的函数里面使用eval,那么评估的expression将不能创建一个变量。

[output1,...,outputN]=eval(expression) 从特定变量表达式即expression中存储所有的输出。

输入参数:

expression:含有有效的MATLAB表达式的字符串。如果要在表达式即expression里面包含数值,请使用int2str,num2str或者sprintf进行转换。

输出参数:

output1,...,outputN:是评估的表达式expression中的输出。

参考资料:百度百科—eval(MATLAB函数)

关于LINUX代理的问题!

分类: 电脑/网络 操作系统/系统故障

问题描述:

也许是我的问题太菜了

1,做LINUX代理需不需要安装系统默认的防火墙,我看好多贴自上写的都是用NAT转换,我也用NAT但是不知道安装LINXU做代理的时候到底要不要安装防火墙?

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

GSTEWAY=里添外网的网关还是内网的

3,在/etc/hosts要不要把所有内网的IP都填进去,对速度是不是有提高

解析:

中了ARP病毒,下载一个最新的杀毒软件(金山下载地址为:orsoon可以免费升级)另外建议买个MAC 交换机或者从LINUX代理服务器里面绑定客户机的MAC地址,具体方法如下:

Linux下使用脚本实现动态arp绑定

BENET学术部

不久前,一位朋友想把他管理的局域网出口全部进行IP和MAC地址绑定,以防止非法用户上网。该局域网是用Linux实现Inter接入和管理。整个网络包括数栋房,分别通过交换机级联到总的Inter出口。网络使用了10.0.0.x到10.0.3.x/255.255.252.0这样的子网,总容量应该有1016(254×4)台主机。目前有大约400位合法上网用户,这些用户可能会随时增减。在Linux系统下,想利用MAC原理对IP进行封杀,从而达到对某个IP地址或IP地址段的管理和控制,可以通过Linux系统提供的ARP来实现。

构思

决定使用ARP绑定后,接下来就要考虑ARP的实现方法。ARP(Address Resolution Protocol)协议是用来向对方的计算机、网络设备通知自己IP对应的MAC地址的。如果所有非法用户都被赋予了错误的MAC地址,那么他们是无法通过这台服务器上网的。因此,ARP绑定要求必须将所有可能的IP地址全部与MAC地址绑定,才能够杜绝非法用户(当然,用户修改MAC地址除外)。

经过一番思索,确定了初步的构思。首先,用Linux Shell的循环方法生成一张包含从10.0.0.1到10.0.3.254的无效MAC地址匹配表,称之为全局表。然后根据DHCP服务器的数据得到一张合法用户的IP和MAC地址表,称之为合法表。接着,读取合法表中每个用户的IP,并在全局表中寻找匹配的IP,如果找到的话就用合法用户的MAC地址替换原来无效的MAC地址。最后,这张全局表中的合法用户匹配正确MAC地址,而非法用户匹配无效的MAC地址。只要用户把这张表写入系统ARP缓存,非法用户就不能通过简单的盗取IP方法来通过网关了。

实现

首先生成一张初始的全局表。它包含所有IP地址,每个IP地址与一个非法的MAC地址匹配。它的格式必须是arp命令能够识别的。初始化全局表的脚本为init,内容如下:

#!/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

写好后存档,用“chmod +x init”命令使得脚本可执行。然后运行脚本init arp,就可以将结果保存到当前目录的arp文件中。该文件就是10.0.0.1到10.0.3.254所有IP地址与MAC地址00e***********绑定的ARP表,看上去该文件类似于下面这样:

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脚本语法虽然和C语言类似,但对格式要求很严格,有些地方不能加空格,有些地方则必须加空格。比如let $count1+=1就不能写成let $count1 += 1;相反,while (( $count1 4 )) 也不能写成while (($count14)),括号与语句之间必需有空格。

接下来通过DHCP服务器得到合法用户的IP与MAC地址匹配表(即合法用户表),假设是valid.arp文件。编写一个脚本一行一行地读取该表,每得到一个IP地址记录,就在前面生成的arp文件中查找同样的IP.如果找到的话,那么就用valid.arp中该IP的MAC地址替换arp文件中该IP的MAC地址。valid.arp文件可能像下面这样:

10.0.0.2 00e00a0f1d2c

……

10.0.1.25 00e0b2c3d5c1

……

查找替换脚本为replace,内容如下:

#!/bin/bash

# 定义并初始化三个变量,分别是合法用户表、全局表和作交换用的表

validArp=valid.arp

globalArp=arp

tmpArp=tmp.arp

count=1

# 371是合法用户的总数,也就是valid.arp表的记录数,然后加1

while (( count 371 ))

do

#“ sed -n‘”$count“p’$validArp”命令将每次打印valid.arp文件中的第$count个记录

# 例如,当$count=1的时候,该命令将打印: 10.0.0.2 00e00a0f1d2c2

# eval $getValid将会执行$getValid变量所包含的语句,并将结果赋给变量$curRec

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

curRec=‘eval $getValid’

# echo $curRec awk‘{print $1}’命令将打印$curRec内容的第一个字段,也就是IP地址

# 然后我们将这个IP地址赋值给$curIP变量

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

curIP=‘eval $getIP’

# 这样我们就得到了合法用户的IP及IP和MAC地址对,接下来是最关键的一步

# 下面两条语句在全局表中查找与得到的IP匹配的项目,找到后就在该记录后面添加合法用户的IP

和MAC地址对,然后删除旧的非法IP和MAC地址对,并将结果存入一个新的文件tmp.arp

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

eval $replace然后用新的文件覆盖全局表文件,并将计数器加1,供下次循环

cp -f $tmpArp $globalArp

let count+=1

done

到此脚本结束。需要注意的地方有两个:第一,所有包含“eval”命令的语句,使用的都是反引号,也就是通常位于Tab键上面的那个引号,这样变量才能得到语句执行的结果,而非语句本身;第二,如果出现变量和其它字母在一起的情况,用双引号将变量包含,否则会出现错误的变量名,例如下面这条语句:

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

如果不用双引号把变量$count包起来,Shell会认为用户的变量是$countp,而不是$count.

在执行完replace后,再查看arp文件,会发现其中所有在valid.arp文件中存在的IP和MAC地址对,其中的初始化MAC地址已被替换为正确的MAC地址。

最后,将得到的arp文件拷贝为/etc/ethers,在系统启动时运行“arp -f”,就可以实现IP和MAC地址匹配了。

总结

通过这件事不难发现,Linux继承了Unix的优秀传统,具备强大和完善的系统管理方法。只要用户掌握一些常用的命令与工具,就可以极大地提高系统管理效率,降低管理的工作强度。学习和掌握这些方法,是每个合格的Linux系统管理员都应该做到的。

网页题目:linux中eval命令 linux中eval命令的使用方法
文章来源:https://www.cdcxhl.com/article30/doeihpo.html

成都网站建设公司_创新互联,为您提供微信小程序建站公司网站策划标签优化云服务器移动网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营