【问题标题】:error in getting a remote file in shell script在 shell 脚本中获取远程文件时出错
【发布时间】:2011-10-13 01:44:05
【问题描述】:

我有这个脚本在 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

【问题讨论】:

    标签: unix shell ssh remote-access scp


    【解决方案1】:

    if[[ 之间留一个空格

    编辑

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

    #!/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
    

    我怀疑你的问题出在其他地方

    【讨论】:

    • 我认为for(( 之间也需要一个空格。 bash 语法比类 C 语言对空格更敏感。
    • @glenn。很好的定位。实际上,第三和第四个服务器之间也缺少空间,这意味着servers数组只包含3个元素,第三个非常无效。
    • @Alexander 感谢大家的建议,我已经相应地更改了我的代码,但我发现即使没有匹配项,我的 If 条件也会产生 true .. 关于它为什么会这样的任何想法那 ?我有以下代码: texts="Untar done you can upload new .tar file" while read line do #echo "in" let count++ echo "$line" if [[ "$line" == "$texts" ]] ;然后 echo "true" let total++ else echo "false" fi
    • @Alexander:是的,它工作正常,我怀疑的问题是当我从 4 个服务器执行 scp 时,我可能无法覆盖文件的本地副本。我在第一台服务器上对文件的内容做了一些更改,以便在比较后得到一个错误的结果,但它仍然表示字符串是相同的。我不知道问题出在哪里。谢谢!
    • @Jassi。你将test.txt复制到/mnt/backups/updateimage,但是从本地目录读取test.txt,当然是一样的。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2013-07-09
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多