我试图在Ubuntu中写一个非常简单的脚本,这将允许我传递它一个文件名或目录,并能够做一些特定的,当它是一个文件,当别名,当它是一个目录。我所遇到的问题是当目录名,或者可能的文件,在名称中有空格或其他可转义字符。
这里是我的基本代码下面,和几个测试。
#!/bin/bash PASSED=$1 if [ -d "${PASSED}" ] ; then echo "$PASSED is a directory"; else if [ -f "${PASSED}" ]; then echo "${PASSED} is a file"; else echo "${PASSED} is not valid"; exit 1 fi fi
这里的输出:
andy@server~ $ ./scripts/testmove.sh /home/andy/ /home/andy/ is a directory andy@server~ $ ./scripts/testmove.sh /home/andy/blah.txt /home/andy/blah.txt is a file andy@server~ $ ./scripts/testmove.sh /home/andy/blah\ with\ a\ space.txt /home/andy/blah with a space.txt is not valid andy@server~ $ ./scripts/testmove.sh /home/andy\ with\ a\ space/ /home/andy with a space/ is not valid
所有这些路径都是有效的,并且存在。
这应该工作。我不知道为什么它的失败。你正确地引用你的变量。如果你使用双[[]]这个脚本会发生什么?
if [[ -d $PASSED ]]; then echo "$PASSED is a directory" elif [[ -f $PASSED ]]; then echo "$PASSED is a file" else echo "$PASSED is not valid" exit 1 fi
双方括号是[]的bash扩展名。它不需要引用变量,即使它们包含空格也不需要。
还值得尝试:-e测试一个路径是否存在,而不测试它是什么类型的文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。