String 将值与bash脚本中的多个范围进行比较,并基于该匹配设置其他变量
我正在bash中设置一个脚本,其中一部分包含一个ip,并根据该ip确定其他网络设置。 这是我的String 将值与bash脚本中的多个范围进行比较,并基于该匹配设置其他变量,string,bash,String,Bash,我正在bash中设置一个脚本,其中一部分包含一个ip,并根据该ip确定其他网络设置。 这是我的 if[ 1 <= $net <= 5] then network=10.1.0.0 netmask=255.255.248.0 gateway=10.1.0.1 elif[16 <= $net <= 23] then network=10.1.16.0 netmask=255.255.248.0 gateway=10.1.16.1
if[ 1 <= $net <= 5]
then
network=10.1.0.0
netmask=255.255.248.0
gateway=10.1.0.1
elif[16 <= $net <= 23]
then
network=10.1.16.0
netmask=255.255.248.0
gateway=10.1.16.1
elif[24 <= $net <= 31]
then
network=10.1.24.0
netmask=255.255.248.0
gateway=10.1.24.1
elif[32 <= $net <= 39]
then
network=10.1.32.0
netmask=255.255.248.0
gateway=10.1.32.1
。。。。。。。。。。。。。。这种情况持续了一段时间
有没有更好的方法来使用case或其他方法
我也不确定我是否正确地执行了IF语句
提前谢谢
编辑:我想我忘了提到IP地址来源于读取输入,然后通过剪切来获取值
IE用户输入10.1.40.207,然后通过管道将愿望切割为$net=40,直接设置值:
network=10.1.$(($net/8*8)).0
netmask=255.255.248.0
gateway=10.1.$(($net/8*8)).1
我已经发布了一个分步骤的解释,说明了我是如何将您的代码简化为上述4个步骤的:
魔法在于数学。一点数学知识就不需要任何条件。没有案例,没有假设,没有但是 直接设置值:
network=10.1.$(($net/8*8)).0
netmask=255.255.248.0
gateway=10.1.$(($net/8*8)).1
我已经发布了一个分步骤的解释,说明了我是如何将您的代码简化为上述4个步骤的:
魔法在于数学。一点数学知识就不需要任何条件。没有案例,没有假设,没有但是 如果可以像其他答案中所示直接计算值,则可以省去大量脚本编写;但是,您可能仍然需要检查有效/无效输入;但这也可以通过使用扩展的if/elif/else/fi来实现 但要回答这个问题,这里有一个if/else可以检查数字的范围,我认为“case”不会简化问题:
#!/bin/bash
arg=$1
if (( 1 <= arg && arg <= 5 )) ; then
echo "from 1-5: $arg"
elif (( 16 <= arg && arg <= 23 )) ; then
echo "from 16-23: : $arg"
elif (( 24 <= arg && arg <= 31 )) ; then
echo "from 24-31: : $arg"
else
echo "invalid : $arg"
fi
如果可以像其他答案中所示直接计算值,那么就消除了大量脚本编写;但是,您可能仍然需要检查有效/无效输入;但这也可以通过使用扩展的if/elif/else/fi来实现 但要回答这个问题,这里有一个if/else可以检查数字的范围,我认为“case”不会简化问题:
#!/bin/bash
arg=$1
if (( 1 <= arg && arg <= 5 )) ; then
echo "from 1-5: $arg"
elif (( 16 <= arg && arg <= 23 )) ; then
echo "from 16-23: : $arg"
elif (( 24 <= arg && arg <= 31 )) ; then
echo "from 24-31: : $arg"
else
echo "invalid : $arg"
fi
我被这种反应弄糊涂了。网络和网关是固定设置。它们用于以后更改文件中的零件。它们在一定范围内保持不变。你试过了吗?做net=25,看看它说什么。等等。这显示了5个随机案例及其结果。诀窍是$$net/8*8轮,精确到8Or的倍数。。。只要在所有可能的子网中循环(如果更容易看到的话):编辑应答它更改了错误的值。网络和网关是固定的。给定任何ip,其中x在10.1.x.0中定义了要执行的网络语句。IE 10.1.16.1和10.1.21.1具有相同的网络声明和gateway.Huh。德普。沃特。我的代码没有派生$net,我将其视为给定的。就像你的代码一样。只需要前三行。我相信你会解决的。看看这个贴纸,把它拼出来:我被这个回答弄糊涂了。网络和网关是固定设置。它们用于以后更改文件中的零件。它们在一定范围内保持不变。你试过了吗?做net=25,看看它说什么。等等。这显示了5个随机案例及其结果。诀窍是$$net/8*8轮,精确到8Or的倍数。。。只要在所有可能的子网中循环(如果更容易看到的话):编辑应答它更改了错误的值。网络和网关是固定的。给定任何ip,其中x在10.1.x.0中定义了要执行的网络语句。IE 10.1.16.1和10.1.21.1具有相同的网络声明和gateway.Huh。德普。沃特。我的代码没有派生$net,我将其视为给定的。就像你的代码一样。只需要前三行。我相信你会解决的。看看这个贴纸,把它拼出来:如果这个值是基于我在我的文章的编辑:部分中输入的内容,那么它仍然有效吗?@DwarfCode是的,它仍然有效;$arg来自prog-arg、用户输入、文件等的位置并不重要。但是,如果遇到问题,您可能需要发布详细信息或提出单独的问题:使用循环进行读取有时可能会很棘手,具体取决于您想做什么。但这一切实际上是一个单独的问题。如果这个值是基于我在我的文章的编辑:部分中输入的内容,那么它仍然有效吗?@DwarfCode是的,它仍然有效;$arg来自prog-arg、用户输入、文件等的位置并不重要。但是,如果遇到问题,您可能需要发布详细信息或提出单独的问题:使用循环进行读取有时可能会很棘手,具体取决于您想做什么。但这实际上是一个单独的问题。