目的是通过调用shell脚本用expect从a节点自动登陆到b节点,然后验证b节点上的某个目录的ok文件是否到达,如果没有就进行睡眠一段时间后再次验证直到扫描5次没有文件,或者扫描到文件后exit 0,想通过每天的调度来跑shell脚本进行检查。
现在写了一段实在不知道怎么获取find这个命令结果然后在后面进行shell脚本的if then ,平时用shell不是很熟练,希望大家帮忙看看,
#!/bin/bash
file_pwd='/bigdata/data/20190902'
   usr/bin/expect <<-EOF
   set timeout 5
   spawn ssh $1@$2
   expect {
        "(yes/no)?" {send "yes\n"}
        "password:"{send"hadoop\n"}
   eof}
   send "find ${file_pwd}|awk -F '.' '{print $2}' "
  expect eof
interact
EOF

解决方案 »

  1.   

    不知道expect怎么把变量传递给shell的,所以我只会在expect中输出一个值或者字符串,然后回到shell去取这个值,来判断,这种方式
    #!/bin/bashfunction() {
                     file_pwd='/bigdata/data/20190902'
                     usr/bin/expect << EOF
                     set timeout 5
                     spawn ssh $1@$2
                     expect {
                    "(yes/no)?" {send "yes\n"}
                    "password:"{send"hadoop\n"} 
                     expect "root@"
                     send "ls test.txt > /dev/null  && echo 0 || echo 1"
                     send "exit\r"
    EOF
    }
    status=`function | *****`类似这样,function这个函数会有一些输出,通过处理,把echo的字符串,过滤出来,赋值给一个变量status,然后再去判断,再在后面加一些操作
      

  2.   

    麻烦问下最后一步function怎么获取结果啊,百度了半天没找到用法啊,而且好像试了一下send "ls test.txt > /dev/null  && echo 0 || echo 1"这一句一定是输出0的,这样就没有检测文件的作用了啊
      

  3.   


    取结果就是status=`function | *****`
    执行这个函数,然后管道进行处理
    ls test.txt > /dev/null  && echo 0 || echo 1  应该不会都是输出0,有test.txt这个文件 则echo 0 ,否则输出1,这句你随便找个机器就可以测试