Linux 使用文本文件作为输入源

Linux 使用文本文件作为输入源,linux,shell,unix,Linux,Shell,Unix,好的,基本上我希望能够使用以下格式的文本文件: www.website.com 443 123.456.789.098 www.website2.com 443 765.432.101.234 .... 作为输入源,脚本将获取网站地址并将其保存在变量中,与端口和Ip地址相同。所以看起来是这样的: website=www.website.com port=443 ip=123.456.789.098 到目前为止,我已经尝试过: for line in [ cat $file_name ]; d

好的,基本上我希望能够使用以下格式的文本文件:

www.website.com 443 123.456.789.098
www.website2.com 443 765.432.101.234
....
作为输入源,脚本将获取网站地址并将其保存在变量中,与端口和Ip地址相同。所以看起来是这样的:

website=www.website.com
port=443
ip=123.456.789.098
到目前为止,我已经尝试过:

for line in [ cat $file_name ]; do
    website=`echo $line | cut -d" " -f1`
    port=`echo $line | cut -d" " -f2`
    ip=`echo $line | cut -d" " -f1`
但当我回显变量时,我得到的是:

[
[
[

我似乎不知道如何着手解决这个问题。

使用此模式:

while read line ; do
    ... loop body ...
done < "$file_name"

请改用此模式:

while read line ; do
    ... loop body ...
done < "$file_name"
读取网站端口IP时
做
echo$网站$IP$端口;
完成<文件
但在循环结束后,您将无法使用此变量。

同时读取网站端口IP
做
echo$网站$IP$端口;
完成<文件

但在循环结束后,您将无法使用此变量。

for
默认情况下不逐行读取,而是读取由$IFS分隔的令牌。默认情况下,IFS通常包含空格、制表符和换行符。如果要强制bash逐行读取(而不是以空格分隔的标记),可以使用以下方法:

IFS=`echo -ne '"\n"'`; for line in `cat $file`; do echo $line; done
注意
cat$file
周围的反勾号,它将执行
cat
“inline”


使用
read
是另一种选择。当然比更改(内部字段分隔符)更容易阅读和理解。

for
默认情况下不逐行读取,而是读取由$IFS分隔的令牌。默认情况下,IFS通常包含空格、制表符和换行符。如果要强制bash逐行读取(而不是以空格分隔的标记),可以使用以下方法:

IFS=`echo -ne '"\n"'`; for line in `cat $file`; do echo $line; done
注意
cat$file
周围的反勾号,它将执行
cat
“inline”

使用
read
是另一种选择。当然比更改(内部字段分隔符)更易于阅读和理解