我正在尝试编写以下任务脚本。
我有一个文件,其中的节点名称和 ips 已更新,我必须制作那些不在我们所需目录中的节点的每个文件,并且这些节点都在更新的文件中,并且编辑它们的名称。
我必须从下往上输入,也就是从最后一行往上输入,而我的脚本将根据我的需要从下往上运行,也就是我所需目录中缺少的那些条目。
我使用 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
我收到此错误:
line 43: syntax error near unexpected token `fi'
line 43: ` fi '
我的脚本的描述
- 第一行从目录中获取有多少个文件。
- 此行从文件中获取输入,该文件有多少行
- 减去数字,结果将是一个整数
- 声明下一行使用的变量值
- 此行从文件中获取输入并剪切保存节点名称的第三列
- 也是一个变量
- 从文件中获取 IP 作为输入
- if 条件
循环的语法是什么for
?
答案1
for
您忘记用关键字标记循环的结束done
。
你也不能像 那样做算术运算lait1++
。你必须做类似的事情
lait1=$(($lait1+1))
以下是更多信息在 Bash shell 脚本中执行算术运算。