Chinaunix首页 | 论坛 | 博客
  • 博客访问: 704875
  • 博文数量: 98
  • 博客积分: 3145
  • 博客等级: 中校
  • 技术积分: 1902
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-15 12:52
文章分类
文章存档

2021年(1)

2020年(1)

2016年(8)

2015年(3)

2014年(1)

2013年(5)

2012年(4)

2011年(9)

2010年(12)

2009年(42)

2008年(12)

我的朋友

分类: LINUX

2013-05-15 16:21:34

今天写了个shell脚本,脚本中需要将变量当做shell命令运行,通常的方法有多种,比如:

  1. `${var}` 将变量内容当shell命令行执行
  2. $(${var}) 将变量内容当shell命令执行
  3. ${var}将变量内容当shell命令执行【不推荐此种方法】

但是这3种方法只能运行单条命令,当命令是下面类型时就会有问题:

  1. VAR1='cd /home ;echo "hello";echo "good"'
  2. VAR2='cd /home && echo "hello" && echo "good"'

此时执行
$(${VAR1}) 就会发现没有输出,通过跟踪命令执行过程发现shell自动将 ; && 使用''进行了限制,为了解决这个问题查了很多资料,没有好的解决方法,
通常我们的crontab 命令会有此种写法,而且执行没有问题,通过查看crontab的资料,发现使用的system函数,所以最后使用awk的system函数解决问题。
解决方法:

  1. VAR1='cd /home ;echo "hello";echo "good"'
  2. VAR2='cd /home && echo "hello" && echo "good"'
  3. echo ${VAR1}|awk '{run=$0;system(run)}'
  4. echo ${VAR2}|awk '{run=$0;system(run)}'
执行结果正确

  1.    hello
  2.    good
  3.    hello
  4.    good


阅读(3158) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~