免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2057 | 回复: 8

变量调用问题 [复制链接]

论坛徽章:
0
发表于 2010-12-19 14:00 |显示全部楼层
a=1
aport=1010

我想调用aport这个变量,但不能直接用 $aport调用.

有个已知条件是 $a , 怎么用 $a+port这个的结合来调出 $aport呢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-12-19 14:09 |显示全部楼层
回复 1# Fjcyz


    给个上下文吧,贴出脚本片段

论坛徽章:
0
发表于 2010-12-19 14:18 |显示全部楼层
本帖最后由 Fjcyz 于 2010-12-19 14:20 编辑

一个文本内容如下:

test1,1.1.1.1,123
test2,2.2.2.2,465
test3,3.3.3.3,722

因为test1,test2,test3是随意定义的

$test1port = 123
$test2port = 465
$test3port = 722

我要调用 test1port 这个变量值时的依据就是 test1

也就是说我要调用的变量是 $($test1 + port)

因为我要用nc判断该ip的端口是否处理正常状态 , 所以要调用 $testport 但问题关键就在于 testport 前的 test部份是文件第一列的值.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-12-19 14:38 |显示全部楼层
这种问题的思路应该是逐行迭代吧,你的思路似乎是把文本解析进变量。我不知道你的文本长度,但我觉得你的办法不大好。当然如果是perl,利用散列处理就不一样了。
你看下面的思路是否合适。(仅仅是想法,具体做的时候可以先处理一下文本)
for i in `cat lines`;do ip=`echo $i|cut -d"," -f2`;port=`echo $i|cut -d"," -f3`;echo $ip   $port;done
1.1.1.1 55
2.2.2.2 66
1.1.1.1 123
2.2.2.2 465
3.3.3.3 722

论坛徽章:
0
发表于 2010-12-19 14:54 |显示全部楼层
情况比较特殊,可能一两句说不是很明白.

上面那个思路我也想过, 问题不仅仅打印出来就可以了.如果仅仅是打印用while也是不错选择

而是下面的脚本内容要引用到  $( test1+port)  也就是 $test1port

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-12-19 15:04 |显示全部楼层
回复 5# Fjcyz


    你可以不打印啊,你需要的变量取出来了,怎么用随便。我只是举个例子。

论坛徽章:
0
发表于 2010-12-19 15:08 |显示全部楼层
不是,我的意思是怎么调用 $test1port  这个变量,

变量中的 test1 是已知道的, port是固定的...

怎么用 test1+port  形成这个 $test1port 变量

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2010-12-19 15:15 |显示全部楼层
本帖最后由 yinyuemi 于 2010-12-19 15:22 编辑

eval echo "$""$a"port

试试这个

我测试:

$ aport=1010

$ b=a

$ eval echo "$""$b"port
1010

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-12-19 15:20 |显示全部楼层
既然如此执着,就eval吧,觉得这种弄法不像shell的风格。变量替换来替换去的...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP