如何包含一个循环来验证远程主机上存在的文件,直到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
$
你,我的朋友,是个天才!有效!!非常感谢。 –