Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 将值与bash脚本中的多个范围进行比较,并基于该匹配设置其他变量_String_Bash - Fatal编程技术网

String 将值与bash脚本中的多个范围进行比较,并基于该匹配设置其他变量

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

我正在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

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、用户输入、文件等的位置并不重要。但是,如果遇到问题,您可能需要发布详细信息或提出单独的问题:使用循环进行读取有时可能会很棘手,具体取决于您想做什么。但这实际上是一个单独的问题。