首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取EOF标记内的变量值?

问如何获取EOF标记内的变量值?
EN

Stack Overflow用户
提问于 2013-08-01 09:01:56
回答 1查看 69.6K关注 0票数 34

我有以下脚本,但我需要让$i变量值在每个以EOF开头和以EOF结尾的块中工作。

它不是读取变量值,而是放入$i。

/var/tmp/vpn.sh我有:

代码语言:javascript
复制
#!/bin/bash
amazonEth0="10.0.0.18"
amazonWan0="4.9.2.9"
vpnServer="4.8.8.6"
hosttoHost1="10.109.0.20/32"
hosttoHost2="10.109.0.21/32"
hosttoHost3="10.109.58.6/32"
hosttoHost4="10.109.59.3/32"

for i in 1 2 3 4
do
cat > /tmp/test$i.conf << \EOF
#Step 3
conn test"$i"
    #auto=start
    type=tunnel
    authby=secret
    pfs=no
    aggrmode=no
    ikelifetime=28800s
    lifetime=3600s
    ike=aes128-md5;modp1024!
    phase2alg=aes128-md5;modp1024
    forceencaps=yes
    left=$amazonLan0
    leftid=$amazonWan0
    leftsourceip=$amazonWan0
    right=$vpnServer
    rightsubnet=$hosttoHost$i
EOF
done

### Run me
cat > /var/tmp/vpn.sh << \EOF
service ipsec restart

######## Apply for loop here, instead of many many lines ###########
# for i in 1 2 3 4
# do
#   ipsec auto --add test$i
# done
ipsec auto --add test1
ipsec auto --add test2
ipsec auto --add test3
ipsec auto --add test4

######## Apply for loop here, instead of many many lines ###########
# for i in 1 2 3 4
# do
#   ipsec auto --up test$i
# done
ipsec auto --up test1
ipsec auto --up test2
ipsec auto --up test3
ipsec auto --up test4

ipsec auto --status
ip xfrm policy
ip route show

######## Apply for loop here, instead of many many lines ###########
# for i in 1 2 3 4
# do
#   ping -c 1 $hosttoHost$i
# done
ping -c 1 10.109.0.20; 
ping -c 1 10.109.0.21;
ping -c 1 10.109.58.6; 
ping -c 1 10.109.59.3; 

EOF
chmod +x /var/tmp/vpn.sh

# Cake - eat now - optional 
/var/tmp/vpn.sh > save output | mail -s ipsec date time &
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 09:05:47

删除EOF前的反斜杠

代码语言:javascript
复制
#!/bin/bash

i=ok

# This prints "Bwah ok"
cat <<EOF
Bwah $i
EOF

# This prints "Bwah $i"
cat <<\EOF
Bwah $i
EOF

要获得最后一行显示rightsubnet="10.109.0.20/32" (用于i=1),您需要类似以下内容:

代码语言:javascript
复制
i=1
val1=beep
val2=bop

rightval="val$i"
cat <<EOF
This is a beep: ${!rightval}
EOF

也就是说,计算所需变量的名称,将其放入另一个变量中,然后使用${!var}语法。

但是对于这类事情,你应该使用数组:

代码语言:javascript
复制
i=0
vals=(beep bop)

cat <<EOF
This is a beep: ${vals[$i]}
EOF

但是请注意,索引从0开始。

票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17983586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档