Linux Bash脚本:IP地址变量';有可能吗?
是否可以将IP地址指向特定的名称?我不介意需要使用什么方法,只是需要一些建议,因为我是bash新手。这样做的原因是我想制作一个脚本来检查输入的IP是针对哪个站点的Linux Bash脚本:IP地址变量';有可能吗?,linux,bash,networking,Linux,Bash,Networking,是否可以将IP地址指向特定的名称?我不介意需要使用什么方法,只是需要一些建议,因为我是bash新手。这样做的原因是我想制作一个脚本来检查输入的IP是针对哪个站点的 e、 g 10.10.100.10=SITECODE因此这里有一个工作代码,$1是console命令中脚本名称后的第一个参数 另外,我有Bash4.4.20版本 您可以这样运行它: ./script.sh 127.0.0.1 输出应为: 爱丽丝 另一种变体是从_ip.txt的文件列表_中读取(该文件不应有额外的换行): #/bin/b
e、 g 10.10.100.10=SITECODE因此这里有一个工作代码,$1是console命令中脚本名称后的第一个参数 另外,我有Bash4.4.20版本 您可以这样运行它: ./script.sh 127.0.0.1 输出应为: 爱丽丝 另一种变体是从_ip.txt的文件列表_中读取(该文件不应有额外的换行):
#/bin/bash
输入=$1
而IFS=读-r对;做
KEY=“${pair%%:*}”
如果[$KEY==$INPUT];然后
VALUE=“${pair##*:}”
echo美元价值
fi
完成
您可以在中为主机条目设置静态ip。虽然还不完全清楚你到底在追求什么,但是。。bash不负责将ip转换为名称,这是无关的。为什么要使用数字索引数组而不是关联数组(用于索引的键本身就是字符串)?如果您有声明-A数组=([“127.0.0.1”]=“Alice”[“127.0.0.2”]=“Bob”)
,您只需在固定时间内查找${array[127.0.0.1]}
,即可得到Alice
结果有几种错误——如果您的IFS值包含在任一变量中找到的字符,或者该变量为空,那么它的行为将很糟糕。引用您的字符串,为了实现最佳的可移植性,请使用=
(POSIX指定的测试
运算符进行字符串比较)而不是=
(bash扩展)。因此:<代码> [ $KEY ] =“$输入”…并且还考虑使用所有变量的小写名称,而不只是<代码>配对< /代码>。POSIX指定允许所有大写变量修改shell或其他操作系统提供的工具的行为,而保证名称中至少有一个小写字母的变量不会修改shell或POSIX指定的操作系统提供的工具的行为(请参阅,记住环境变量和常规shell变量共享一个名称空间)。我想你有点自相矛盾,在另一个系统上可能有另一个版本的Bash不支持哈希表。我建议不要在不增加值的情况下使用不可移植的结构。==
没有任何好处;您编写的代码比使用=
编写的代码要长,而且还得到了不支持哈希表的代码Hash表/关联数组确实增加了一个好处(在简洁性和性能方面),因此您可以从支付不可移植代码的成本中得到一些回报。
#!/bin/bash
INPUT=$1
ARRAY=( "127.0.0.1:Alice"
"127.0.0.2:Bob"
"127.0.0.3:John"
)
for pair in "${ARRAY[@]}" ; do
KEY="${pair%%:*}"
if [ $KEY == $INPUT ];then
VALUE="${pair##*:}"
echo $VALUE
fi
done
#!/bin/bash
INPUT=$1
while IFS= read -r pair; do
KEY="${pair%%:*}"
if [ $KEY == $INPUT ];then
VALUE="${pair##*:}"
echo $VALUE
fi
done < list_of_ip.txt