免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5444 | 回复: 11

[文本处理] 【已解决】eval 给变量重新赋值一直不对啊,求教@all [复制链接]

论坛徽章:
0
发表于 2016-06-14 18:08 |显示全部楼层
本帖最后由 飘动de心 于 2016-06-15 16:14 编辑

如何给变量重新赋值,用eval原来可以的,貌似加了个$name就不可以了

body:
  1.         variables=($sname"_database_url" $sname"_database_port" $sname"_database_name" $sname"_database_username" $sname"_database_password")
  2.         for i in ${variables[@]}
  3.         do
  4.                 tmp=`cat $config |grep $i |cut -d'=' -f2- |sed 's/^ *\| *$//g'`
  5.                 eval ${i}=$tmp
  6.                 if [ -z $tmp ];then
  7.                         echo "Error: Unknow $i. Please check $config."
  8.                         exit 1
  9.                 fi
  10.         done
复制代码
输出
  1. ./test.sh: line 81: ms-product_database_url=192.168.10.100: command not found
  2. ./test.sh: line 81: ms-product_database_port=3306: command not found
  3. ./test.sh: line 81: ms-product_database_name=test: command not found
  4. ./test.sh: line 81: ms-product_database_username=root: command not found
  5. ./test.sh: line 81: ms-product_database_password=123456: command not found
复制代码

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
发表于 2016-06-14 19:19 |显示全部楼层
eval let ${i}=$tmp

论坛徽章:
0
发表于 2016-06-15 04:46 |显示全部楼层
eval i=$tmp 可以吗?

论坛徽章:
0
发表于 2016-06-15 09:32 |显示全部楼层
当然不可以,那样会没有值回复 3# wjemail


   

论坛徽章:
0
发表于 2016-06-15 09:36 |显示全部楼层
之前试过
./test.sh: line 82: let: zhangsan_database_url=192.168.10.100: syntax error: invalid arithmetic operator (error token is ".168.10.100")
回复 2# liion631818


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2016-06-15 10:31 |显示全部楼层
回复 5# 飘动de心

如果你要解决问题....
先说你要做什么(目地是什么)?
(肚子饿,不要一直问宫保鸡丁怎么做,.....
问肚子饿,最简单(解决)方法是什么?------去馆子就可饱餐....)
   

论坛徽章:
0
发表于 2016-06-15 10:46 |显示全部楼层
本帖最后由 飘动de心 于 2016-06-15 10:54 编辑

配置文件替换从a.conf读取内容重新替换到b.conf

a.conf:
a_name=zs
a_age=11
a_mail=zs@mail.com
a_address=192.168.1.0/index.php

b_name=ww
b_age=19
b_mail=ww@mail.com
b_address=192.168.10.0/index.php

b.conf:
name=ls
age=20
mail=ls@mail.com
address=192.168.1.100/welcome.php

文件的格式为 key=value
首先我想先判断value是否为空,不为空替换到b.conf
另外a b c d是单独$name获取

我的方法可能复杂了点:
将需要修改的key存在数组里,然后循环判断value是否为空,不为空赋值给key,最后开始替换 xxx= `cat b.conf |grep name|cut -d'=' -f2-`    sed -i 's/xxx/$key/g' b.conf
回复 6# jason680


   

论坛徽章:
768
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2016-06-15 11:13 |显示全部楼层
回复 1# 飘动de心

这一行为什么报错我知道的。
  1. ./test.sh: line 81: ms-product_database_url=192.168.10.100: command not found
复制代码
你想把shell变量ms-product_database_url赋值为192.168.10.100
但shell变量不允许"-",你要保证$sname取到的字符串和后面拼起来能形成一个
有效的shell变量名。

   

论坛徽章:
0
发表于 2016-06-15 11:16 |显示全部楼层
正是这样 ,我一直在找为什么把整的一行当做字符串拼接然后做为命令
谢谢指导。。
回复 8# Herowinter


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2016-06-15 11:17 |显示全部楼层
回复 7# 飘动de心

$ name=a

$ awk -vh="$name" 'BEGIN{FS=OFS="="}FNR==NR{a[h"_"$1]=$2;next}{if($1 in a)$2=a[$1]}1' b.conf a.conf
a_name=ls
a_age=20
a_mail=ls@mail.com
a_address=192.168.1.100/welcome.php


b_name=ww
b_age=19
b_mail=ww@mail.com
b_address=192.168.10.0/index.php


$ name=b

$ awk -vh="$name" 'BEGIN{FS=OFS="="}FNR==NR{a[h"_"$1]=$2;next}{if($1 in a)$2=a[$1]}1' b.conf a.conf
a_name=zs
a_age=11
a_mail=zs@mail.com
a_address=192.168.1.0/index.php

b_name=ls
b_age=20
b_mail=ls@mail.com
b_address=192.168.1.100/welcome.php


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP