|
|
|
|
移动端

3.3.2 变量定义及变量输出说明(2)

《跟老男孩学Linux运维:Shell编程实战》本书是一本较完整的Shell编程实战型图书,并非大而全,但处处可以体现实战二字,大多内容取于企业实战,并结合老男孩十几年的运维工作和教学工作进行了梳理。本节为大家介绍变量定义及变量输出说明。

作者:老男孩来源:机械工业出版社|2017-04-21 10:54

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

3.3.2 变量定义及变量输出说明(2)

根据上述范例整理的测试结果见表3-3,供读者参考。

表3-3 测试结果

结论:不管变量如何定义、赋值,除了加单引号以外,利用awk直接获取变量的输出,结果都是一样的,因此,在awk取用Shell变量时,我们更多地还是喜欢先用echo加符号输出变量,然后通过管道给awk,进而控制变量的输出结果。举例如下:

  1. [root@oldboy ~]# ETT="oldgirl"          #<==最常规的赋值语法  
  2. [root@oldboy ~]# echo "$ETT"|awk '{print $0}'   #<==用双引号引用$ETT  
  3. oldgirl  
  4. [root@oldboy ~]# echo '$ETT'|awk '{print $0}'   #<==用单引号引用$ETT  
  5. $ETT  
  6. [root@oldboy ~]# echo $ETT|awk '{print $0}' #<==不加引号引用$ETT  
  7. oldgirl  
  8. [root@oldboy ~]# ETT=`pwd`          #<==命令赋值的语法  
  9. [root@oldboy ~]# echo "$ETT"|awk '{print $0}'  
  10. /root  
  11. [root@oldboy ~]# echo '$ETT'|awk '{print $0}'  
  12. $ETT  
  13. [root@oldboy ~]# echo $ETT|awk '{print $0}'  
  14. /root 

这就符合前面给出的普通情况的结论了。不过,这个例子特殊了一点,有关awk调用Shell变量的详情,还可以参考老男孩的博客“一道实用Linux运维问题的9种Shell解答http://oldboy.blog.51cto.com/2561410/760192”。

范例3-12:通过sed指定变量关键字过滤。

  1. [root@oldboy ~]# cat sed.log  
  2. testchars  
  3. oldboy  
  4. [root@oldboy ~]# sed -n /"$OLDBOY"/p sed.log    #<==加双引号测试  
  5. testchars  
  6. [root@oldboy ~]# sed -n /$OLDBOY/p sed.log  #<==不加引号测试  
  7. testchars  
  8. [root@oldboy ~]# sed -n /'$OLDBOY'/p sed.log    #<==加单引号测试  
  9.   #<==输出本身,但是文件里没有本身匹配的字符串,因此输出为空 

注意:sed和grep的测试和前面结论是相符的,唯有awk有些特殊。

提示: 上述内容不需要特意去记,在使用时测试一下就会明白。

关于自定义普通字符串变量的建议

1)内容是纯数字、简单的连续字符(内容中不带任何空格)时,定义时可以不加任何引号,例如:

  1. a.OldboyAge=33 
  2. b.NETWORKING=yes 

2)没有特殊情况时,字符串一律用双引号定义赋值,特别是多个字符串中间有空格时,例如:

  1. a.NFSD_MODULE="no load" 
  2. b.MyName="Oldboy is a handsome boy." 

3)当变量里的内容需要原样输出时,要用单引号(' '),这样的需求极少,例如:

  1. a.OLDBOY_NAME='OLDBOY' 


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

精通SOA:基于服务总线的Struts+EJB+Web Service

Java的出现,实现了跨操作系统平台的程序开发,以Java为基础的J2EE技术已经成为因特网服务技术的主流。然而,以J2EE为基础的SOA架构技术必...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊