在读取和保存变量时进行Bash

时间:2014-11-21 12:49:41

标签: bash variables

我想通过bash“解析”一个文本文件,并希望通过这样做来保存几个变量。

目前我的代码如下:

#!/bin/bash
#set -x
#vlantag=""
#servername=""
kdip=""
#swport=""

cat test|while read line; do
    if [[ -z $kdip ]]; then
        kdip=$(echo $line | grep Kunden-IP-Adresse |
            grep 4948 | cut -d":" -f2 | tr -d ";" |
            sed 's/^[ \t]*//;s/[ \t]*$//')
    fi
    #echo $kdip;
done

echo $kdip

我想要做的是逐行grep,保存像kdip全局的东西,稍后使用这些变量来使用它们来填充另一个文本文件。事情是,我的最后一个回声是空的。 kdip仅在“while-loop”中有效。如何使kdip的值永久化?

1 个答案:

答案 0 :(得分:3)

你的基本上是http://mywiki.wooledge.org/BashFAQ/024的变体,但整个脚本将受益于大量的重构,这也巧合地消除了这个问题。

kdip=$(awk -F ':' '/Kunden-IP-Adresse/ && /4948/ {
    k=$2; gsub(/;/,"",k) gsub(/^[ \t]+|[ \t]+$/,"",k);
    print k; exit(0) }' test)

如果你想要提取更多变量,只需让Awk脚本计算它们并以合适的形式写出来 - 在最坏的情况下,你可以从shell中eval但是如果这些值适合机器读取,则类似

set -- $(awk stuff ...)
kdip=$1
servername=$2

可以很好地工作 - 只需确保Awk脚本输出kdip值作为第一个字段,服务器名称输出等等。