如何包含一个循环来验证远程主机上存在的文件,直到KSH中的语句为真?

问题描述:

所以我想验证是否存在一个远程主机上存在的文件,如果是的话,说有效。如果没有,那就说它是无效的。我有这个功能。然而,我似乎无法想出一个循环来证实这个说法对于继续使用脚本是正确的。或者,在搞乱之后,它会继续处理脚本,但它不会正确验证文件以重复提问。经过多次失败尝试后,这就是我所想到的。如何包含一个循环来验证远程主机上存在的文件,直到KSH中的语句为真?

validate_d() 
    { 
     valid="file exists" 
     invalid="file doesn't exist" 
     ssh -q *host* [[ -f $userpath]] && echo "valid" || echo "invalid"; 
    } 
     while (*this is my script asking the user if they input the correct path, if not, keep asking for correct path*) 
     done 
    validate_d 
     until [[ this statement is confirmed that the file exists ]]; do 
      print $invalid 
      read userpath 
     done 

在until语句中,我无法弄清楚如何验证文件是否存在以及条件是否成立。我应该使用直到还是同时使用if?任何形式的反馈都将是一个很大的帮助。谢谢!

要测试远程文件的存在以及b)如何传回有效/无效的代码,将会有很多方法。

这里有一个裸露的骨头例如:

while true 
do 
    printf "Enter fullpath of file to check for: " 
    read userpath 
    ssh -q hostname [ -f "${userpath:-undefined}" ] 
    [ $? -eq 0 ] && echo 'valid' && break 
    echo 'invalid' 
done 

[ -f ${userpath} ]被命名为“远程主机”的主机上远程执行。

如果找到由${userpath}表示的文件,则返回0(true),否则返回1(false)。

$?包含ssh/-f ${userpath}构造的返回码。

如果找到文件($?=0),我们回显'有效'并跳出循环,否则我们打印'无效'并执行循环的下一次迭代。

假设/tmp/test1/tmp/test2不要在远程主机文件存在,但该文件/tmp/test3确实存在,运行上面的代码片段看起来像:

$ while true 
do 
    printf "Enter fullpath of file to check for: " 
    read userpath 
    ssh -q hostname [ -f "${userpath:-undefined}" ] 
    [ $? -eq 0 ] && echo 'valid' && break 
    echo 'invalid' 
done 
Enter fullpath of file to check for: /tmp/test1 
invalid 
Enter fullpath of file to check for: /tmp/test2 
invalid 
Enter fullpath of file to check for: /tmp/test3 
valid 
$ 
+0

你,我的朋友,是个天才!有效!!非常感谢。 –