Bash—读取.txt文件并将信息存储在变量中以供以后使用的脚本

Bash—读取.txt文件并将信息存储在变量中以供以后使用的脚本,bash,shell,unix,network-programming,network-interface,Bash,Shell,Unix,Network Programming,Network Interface,我正在编写一个bash脚本,它必须能够创建网络接口配置文件,将它们存储在任何类型的文件中。我猜,如果使用参数调用,例如:./myscript eth0 myprofile 必须执行myprofile.txt中的命令才能配置该网络接口 所以,现在,我正试图将这些信息放在一个.txt文件ip、网络掩码、网关和代理中:当然,格式数据的示例可能无效 192.168.20.3 255.255.255.0 192.168.20.1 20.139.30.4:80 如你所见,我得到的信息用空格隔开。我想知道这是

我正在编写一个bash脚本,它必须能够创建网络接口配置文件,将它们存储在任何类型的文件中。我猜,如果使用参数调用,例如:./myscript eth0 myprofile

必须执行myprofile.txt中的命令才能配置该网络接口

所以,现在,我正试图将这些信息放在一个.txt文件ip、网络掩码、网关和代理中:当然,格式数据的示例可能无效

192.168.20.3 255.255.255.0 192.168.20.1 20.139.30.4:80

如你所见,我得到的信息用空格隔开。我想知道这是否是一种不好的做法,因为我希望脚本在给定文件名的情况下检索此信息并将其单独存储在变量中,以便我可以使用此信息调用ifconfig、route等命令


有什么办法可以做到这一点吗?

这就是我该如何处理这个问题:

#!/bin/bash

if [[ $# != 2 ]]; then
    echo "ERROR: Usage is ./$0 eth-name profile-name"
    exit 1
fi

eth=$1
profile=$2

if [[ ! -f "$profile.txt" ]]; then
    echo "ERROR: $profile.txt file not found!"
    exit 1
fi

# TODO: validate $eth

ip=$(awk '{print $1}' "$profile.txt")
netmask=$(awk '{print $2}' "$profile.txt")
gateway=$(awk '{print $3}' "$profile.txt")
proxy=$(awk '{print $4}' "$profile.txt")

echo "ip: $ip"
echo "netmask: $netmask"
echo "gateway: $gateway"
echo "proxy: $proxy"

# DO whatever with $ip, $netmask, $gateway, $proxy
通过运行该示例,我得到以下结果:

$ > cat myprofile.txt
192.168.20.3 255.255.255.0 192.168.20.1 20.139.30.4:80
$ > bash myscript.sh eth0 myprofile
ip: 192.168.20.3
netmask: 255.255.255.0
gateway: 192.168.20.1
proxy: 20.139.30.4:80
$ >

我还将在txt中的每个4项配置旁边包含配置文件名,以便在使用myprofile参数调用myscript时,它可以在txt数据库中找到相关的配置。使用空白肯定不是问题,除非在ip、网络掩码、网关和代理的名称中出现空白字符。谢谢您的回复,chatraed。实际上,我完全可以自由地以任何可能的方式实现此功能。如果我愿意,我可以将每个配置文件存储在一个单独的.txt文件中,我想这可能会更容易。有什么建议吗?先生,你绝对是我的英雄。我真的需要学习更多关于bash脚本的知识。你救了我的命!非常感谢你。