使用带有if语句的ssh命令的Shell脚本

时间:2014-01-02 18:07:23

标签: bash shell unix if-statement ssh

我想编写一个shell脚本来执行以下操作:

  1. 一次登录一些远程计算机,例如host1和host2
  2. 转到/ tmp目录并检查名为'dirname'的特定目录是否存在。如果它不存在,请创建目录'dirname'
  3. 转到目录/ tmp / dirname
  4. 将具有变量runNo的文件从本地计算机复制到此目录
  5. 我试过这样的东西,但它不起作用..任何帮助都会非常感激。谢谢!

    #! /bin/bash
    dir1=dirname
    runNo=0
    
    for i in 1 2
    do
      runNo=$(($runNo+1))
      echo "host$i runNo$runNo"
    
      ssh host$i "cd /tmp;
        if [ -d $dir1 ]; then
          cd $dir1;
        else
          mkdir $dir1;
          cd $dir1;
        fi;
        cp ~/local/file$runNo file"
    
      echo "done"
    done
    

3 个答案:

答案 0 :(得分:1)

怎么样

ssh host$i "mkdir -p /tmp/$dir1"
scp ~/local/file$runNo host$i:/tmp/$dir1/file
如果目录已经存在,

mkdir -p会阻止错误。

答案 1 :(得分:0)

或许这样吗?

runNo=1
for h in host1 host2; do
    cat ~/local/file$runNo |
    ssh "$h" 'mkdir -p /tmp/dirname; cat >/tmp/dirname/file'
    runNo=$(($runNo+1))
done

如果我正确理解您的说明,则cd是多余的。

如果需要Bourne shell兼容性,可以用

替换增量
    runNo=$(expr $runNo + 1)

答案 2 :(得分:-1)

试试这个:

ssh -t -t host$i <<eod1
echo "your command goes here"
add eod1 to terminate your ssh
eod1

注意需要两个-t -t来覆盖sudo终端错误

这个编辑规则让我发疯了