Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Unix 在shell脚本中获取远程文件时出错_Unix_Shell_Ssh_Remote Access_Scp - Fatal编程技术网

Unix 在shell脚本中获取远程文件时出错

Unix 在shell脚本中获取远程文件时出错,unix,shell,ssh,remote-access,scp,Unix,Shell,Ssh,Remote Access,Scp,我有一个脚本,它在4台服务器上执行scp,并在调用服务器上获取文件,但是当我运行它时,我得到以下错误: syntax error near unexpected token `then' line 16: `if[[ $line = $texts ]] ; then 代码如下: #!/bin/sh servers=("root@67.215.227.233" "root@57.245.127.134" "root@67.215.127.135" "root@116.244.128.153")

我有一个脚本,它在4台服务器上执行scp,并在调用服务器上获取文件,但是当我运行它时,我得到以下错误:

syntax error near unexpected token `then'
line 16: `if[[ $line = $texts ]] ; then 
代码如下:

#!/bin/sh
servers=("root@67.215.227.233" "root@57.245.127.134" "root@67.215.127.135" "root@116.244.128.153")
tlen=${#servers[@]}
count=o
total=0
texts="Untar done you can upload new .tar file"
for(( i=0; i<${tlen}; i++ ));
    do
    echo "in"
    scp ${servers[$i]}:/usr/site/html/test/test.txt /mnt/backups/updateimage
    cat test.txt ; while read line
    do
    echo "in"
    let count++
    echo "$line"
    if[[ $line = $texts ]] ; then 
    echo "true" 
    let total++ 
    else echo "false" 
    fi
   done < test.txt
done
exit 0
#/垃圾箱/垃圾箱
服务器=(“root@67.215.227.233" "root@57.245.127.134" "root@67.215.127.135" "root@116.244.128.153")
tlen=${#服务器[@]}
计数=零
总数=0
text=“卸载完毕,您可以上载新的.tar文件”

for((i=0;i在
if
[[

编辑

我刚刚运行了这个测试,它正确地评估为false

#!/bin/bash

set -eu

texts="Untar done you can upload new .tar file"
line="foo"

if [[ $line = $texts ]] ; then
  echo "true"
else
  echo "false"
fi

我怀疑你的问题在别处

if
[[

编辑

我刚刚运行了这个测试,它正确地评估为false

#!/bin/bash

set -eu

texts="Untar done you can upload new .tar file"
line="foo"

if [[ $line = $texts ]] ; then
  echo "true"
else
  echo "false"
fi

我怀疑你的问题在别处

我认为
之间有一个空格((
也是必需的。bash语法比类似C的语言对空格更敏感。@glenn。这一点很好。事实上,第三台和第四台服务器之间也缺少空格,这意味着
服务器
数组只包含3个元素,第三个元素非常无效。@Alexander感谢大家的建议,我有chan我相应地修改了我的代码,但我发现我的If条件即使在没有匹配的情况下也会产生true。你知道为什么会这样吗?我有以下代码:text=“Untar done you can upload new.tar file”,而在“let count++echo”$line”中读取line do#echo;如果[[“$line”==“$text”]],则echo“true”让total++else回显“false” fi@Alexander:是的,它工作正常,我怀疑的问题是,当我从4台服务器执行scp时,我可能不会覆盖文件的本地副本。我在第1台服务器上对文件的内容做了一些更改,以便在比较后可以得到一个假值,但它仍然指出字符串是相同的。我不知道问题出在哪里。谢谢!@Jassi。您将
test.txt
复制到
/mnt/backups/updateimage
,但是从本地目录中读取
test.txt
,当然它保持不变。我认为
之间有一个空格((
也是必需的。bash语法比类似C的语言对空格更敏感。@glenn。这一点很好。事实上,第三台和第四台服务器之间也缺少空格,这意味着
服务器
数组只包含3个元素,第三个元素非常无效。@Alexander感谢大家的建议,我有chan我相应地修改了我的代码,但我发现我的If条件即使在没有匹配的情况下也会产生true。你知道为什么会这样吗?我有以下代码:text=“Untar done you can upload new.tar file”,而在“let count++echo”$line”中读取line do#echo;如果[[“$line”==“$text”]],则echo“true”让total++else回显“false” fi@Alexander:是的,它工作正常,我怀疑的问题是,当我从4台服务器执行scp时,我可能不会覆盖文件的本地副本。我在第1台服务器上对文件的内容做了一些更改,以便在比较后可以得到一个假值,但它仍然指出字符串是相同的。我不知道问题出在哪里。谢谢!@Jassi。您将
test.txt
复制到
/mnt/backups/updateimage
,但是从本地目录读取
test.txt
,当然它保持不变。