“if...else”条件下的“for”循环出错

“if...else”条件下的“for”循环出错

大家好,我是编写 bash 脚本的新手。

我有任务要做。我有一个文件,其中节点名称和 IP 地址已更新,我必须制作不在我们所需目录中的节点的每个文件,以及位于更新文件中的节点的每个文件,并编辑它们的名称。

我必须从下到上给出输入意味着从最后一行到向上,我的脚本将根据我的需要从下到上运行意味着我所需目录中缺少的那些条目。

我使用 if else 条件,并且必须放置 for 循环来完成我的任务,直到它等于。我的脚本是

!/bin/bash

set -x

giosdir=$(find /usr/local/example-dir -maxdepth 1 -type f | wc -l)

lbdir=$(more /root/scripts/servers/new/example.txt |wc -l)

count=$(($lbdir-$giosdir))

lait2=1

l2=$(awk '{print $3}' < /root/scripts/servers/new/example.txt | tail -$lait2)

lait=1

newip=$(awk '{print $1}' < /root/scripts/servers/new/example.txt | tail -$lait)

if [ $nagiosdir -eq $lbdir ] ; then

echo " Nothing to do "

else

  if [ $giosdir -lt $lbdir ] ; then


   for((i=0;i<count;i++));do

    {


  cd /usr/local/

  cp example-Node-2.txt   $l2.txt

  sed -i 's/10.10.0.1/'$newip'/' $l2.txt

  sed -i 's/examole-Node-2.txt/'$l2'/' $l2.txt

  echo " Node is added successfull"

  lait2++;
   lait++;           

     }

  fi
fi

但我收到这个错误

第 43 行:意外标记 fi' 附近的语法错误第 43 行:fi '

我的脚本的描述:

  1. 第一行是从目录中获取有多少个文件的输入。

  2. 该行从文件中获取输入,该文件有多少行

  3. 减去数字,该值将是一个整数

  4. 声明在下一行中使用的变量值

  5. 此行从文件中获取输入并剪切保存节点名称的第三列

  6. 也是一个变量

  7. 将 IP 地址作为文件的输入

  8. if状况

关于循环的语法有什么想法for吗?

答案1

在所有其他事情中,您没有在和done之间终止 for 循环。在这种情况下,您不需要使用大括号。}fi

bash 中的运算符++需要算术扩展,因此您需要使用((lait++)).

$nagiosdir -eq $lbdir比较整数,因此使用字符串会产生错误:

$ test hi -eq hi
-bash: test: hi: integer expression

你会想用它$nagiosdir = $lbdir来代替。

还有其他事情,但这些将是脚本中的语法错误。

答案2

for通过终止循环done。 (您可以删除 for 循环中的那些大括号。)

答案3

我不知道你的脚本,但我调试你的脚本:

#!/bin/bash
set -x
giosdir=$(find /usr/local/example-dir -maxdepth 1 -type f | wc -l)
lbdir=$(more /root/scripts/servers/new/example.txt |wc -l)
count=$(($lbdir-$giosdir))
lait2=1
l2=$(awk '{print $3}' < /root/scripts/servers/new/example.txt | tail -$lait2)
lait=1
newip=$(awk '{print $1}' < /root/scripts/servers/new/example.txt | tail -$lait)
if [ "$nagiosdir" = "$lbdir" ] ; then
echo " Nothing to do "
else
  if [ "$giosdir" <= "$lbdir" ] ; then
   for((i=0;i<count;i++));do

  cd /usr/local/
  cp example-Node-2.txt   $l2.txt
  sed -i 's/10.10.0.1/'$newip'/' $l2.txt
  sed -i 's/examole-Node-2.txt/'$l2'/' $l2.txt
  echo " Node is added successfull"
  lait2++;
   lait++;           
   done;
  fi;
fi;

相关内容