我有一个包含多行的txt文件,每行都描述一个远程服务器,如下所示:
user@server:port:remote_working_path:whether_using_VPN
Run Code Online (Sandbox Code Playgroud)
:char分隔了4个字段.
我需要在每个服务器中操作批处理操作,因此我需要解析每一行并设置适当的变量.现在,我编码的是:
while read server;
do
echo "$server" | awk -F ':' '{print $1}' &&
echo "$server" | awk -F ':' '{print $2}' &&
echo "$server" | awk -F ':' '{print $3}'
echo "$VPN"
declare $( echo "$server" | awk -F ':' '{print $VPN=$4}' )
echo 'VPN: '$VPN
done < $CUSTOMER_SERVERS_FILE
Run Code Online (Sandbox Code Playgroud)
此脚本仅打印前3个字段,并且我的意图还应将$ VPN变量设置为第4个字段.然而,这似乎有点破碎,我无法解决它.我应该如何修改它以便$ VPN = $ 4?
首先,awk在这种情况下你不需要使用.您可以尝试使用以下内容:
while IFS=':' read -ra array; do
# "${array[0]}" => first field
# "${array[1]}" => second field
# ...
# "${array[@]}" => all fields
done < "$CUSTOMER_SERVERS_FILE"
Run Code Online (Sandbox Code Playgroud)
然后,如果要使用第4个字段设置VPN变量,可以使用:
while IFS=':' read -ra array; do
# ...
VPN="${array[3]}"
done < "$CUSTOMER_SERVERS_FILE"
Run Code Online (Sandbox Code Playgroud)
另一种方案:
while IFS=':' read -r address port path vpn trash; do
# The variables $adress $port $path and $vpn are assigned.
# $trash is set with other fields if there are more than 4 fields
done
Run Code Online (Sandbox Code Playgroud)
最后,当您想要在变量中分配命令的输出时,您可以:
var="$(command)"
# or
var="`command`"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |