我有一个test.csv文件,如下所示
LOC,IP,D1,D2
abc1,10.13|10.12|10.13|10.14|10.15|10.16,10.11.1.1,11.1.1.23
abc2,12.11|10.15|10.116|10.127|10.110,11.110.8.25,11.11.5.3
abc3,13.21|13.2,10.1.4.50,10.2.7.3
我想在目标服务器上计算Ipaddress,然后检查ipaddress
是否与test.csv
文件中的值匹配。如果匹配,那么我想将check_func
和pass values of D1 and D2
称为该函数。
到目前为止,我可以使用以下命令
计算ipaddress
host=`uname -n'`
ip_addr=`host $host | awk '{print $NF}'`
现在,我想做类似下面的事情:
case $ip_addr in
10.11|10.12|10.13|10.14|10.15|10.16)
check_func "10.11.1.1" "11.1.1.23"
我编写了以下脚本,但没有给出正确的结果。我总是得到输出Unknown.
#! /bin/bash
shopt -s extglob
IFS_backup=$IFS
IFS=,
while read -r column1 column2 column3 column4 ; do
shopt -s extglob
case "$ip_addr" in
@($column2)) check_func "$column3" "$column4" ;;
*) echo Unknown. ;;
esac
done < file.csv
答案 0 :(得分:1)
全球比赛需要准确。前缀或子字符串匹配不会触发case子句。
所以你可能想要
WebDriverException: chrome not reachable
(Session info: chrome=65.0.3325.181)
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.16299 x86_64)
有效地接受任何替代方案的前缀匹配。
顺便说一下,为@($column2)*) check_func "$column3" "$column4" ;;
语句设置IFS
的更简洁方法是
read
这只是为while IFS=, read -r column1 column2 column3 column4 ; do
命令的环境设置IFS
,因此您不必担心它会影响脚本的其余部分。
答案 1 :(得分:1)
尝试这样的事情:
host=$(uname -n)
awk -F, -v ip_addr="$(host "$host")" '
BEGIN { sub(/.*[[:space:]]/,"",ip_addr) }
{ gsub(/\./,"[.]",$2) }
ip_addr ~ $2 { print $3, $4; f=1 }
END { if (!f) print "Unknown" | "cat>&2" }
' file.csv |
xargs -n 2 check_func
当然未经测试,因为您没有提供一套完整的样本输入/输出,我们可以对其进行测试,但希望它足够接近,如果它不完全正确,您可以解决。< / p>