shell脚本awk之变量传递

一、在shell脚本中awk引用shell变量

1.双引号加单引号的形式

(1)awk引用系统变量
#!/bin/bash
awk 'BEGIN{print "'$HOSTNAME'"}'

执行结果:
[root@node1 pangbing_test]# sh test 
node1

加上字符串拼接

#!/bin/bash
awk 'BEGIN{print "hostname = ""'$HOSTNAME'"}'

执行结果:
[root@node1 pangbing_test]# sh test 
hostname = node1
(2)awk引用自定义变量
#!/bin/bash
ip="192.168.1.1"
awk 'BEGIN{print "ip_addr = ""'$ip'" }'


执行结果如下:
[root@node1 test]# sh test 
ip_addr = 192.168.1.1

2."-v" 形式传递

-v形式的变量引用可阅读性更强一些

(1)引用系统变量
#这里传递了多个变量给awk,每一个-v对应一个变量(也只能有一对一)
#!/bin/bash
awk -v host=$HOSTNAME -v username=$USER -v system_digit=$HOSTTYPE \
        'BEGIN{print host,username,system_digit}'

执行结果:
[root@node1 test]# sh test 
node1 root x86_64

上边结果显示不是很直观,可以加上字符串拼接的效果

#注意点有三点
(1) 代码中的\是让文件中的代码换行,对于显示结果没有任何影响
(2)awk通过-v引用变量 在awk中使用变量不用"" + '' 包裹了
(3)在做字符串拼接的时候"字符串""变量"之间加空格对显示效果没有影响
#!/bin/bash

awk -v host=$HOSTNAME -v username=$USER -v system_digit=$HOSTTYPE \
        'BEGIN{print "linux-host-namt=" host,\
        "linux-user-name=" username,\
        "linux-system-digit=" system_digit
}'    

执行结果如下:
[root@node1 test]# sh test 
linux-host-namt=node1 linux-user-name=root linux-system-digit=x86_64

想让结果换行,可以在加上\n

#!/bin/bash

awk -v host=$HOSTNAME -v username=$USER -v system_digit=$HOSTTYPE \
        'BEGIN{print "linux-host-namt = " host  "\n"\
        "linux-user-name = " username  "\n"\
        "linux-system-digit = "system_digit
}'

执行结果如下
[root@node1 test]# sh test 
linux-host-namt = node1
linux-user-name = root
linux-system-digit = x86_64

(2)引用自定义变量
#!/bin/bash
#先定义好shell变量 awk在应用
ip="192.168.1.1"
awk -v awkip=$ip 'BEGIN{print awkip}'

#直接在awk中定义变量 然后在引用
awk -v awkip="192.168.1.1" 'BEGIN{print awkip}'

执行结果都能显示:
[root@node5 ~]# sh test.sh 
192.168.1.1
192.168.1.1


字符串拼接后
#!/bin/bash
ip="192.168.1.1"
awk -v awkip=$ip 'BEGIN{print "间接引用awkip = " awkip}'

awk -v awkip="192.168.1.1" 'BEGIN{print "直接定义awkip = " awkip}'



执行结果:
[root@node5 ~]# sh test.sh 
间接引用awkip = 192.168.1.1
直接定义awkip = 192.168.1.1

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值