Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell脚本和测试表达式_Shell - Fatal编程技术网

Shell脚本和测试表达式

Shell脚本和测试表达式,shell,Shell,我试图测试在将文件传递到脚本时是否存在目录路径。我使用dirname剥离并保存路径。我希望脚本仅在路径存在时运行。下面是我的尝试 文件=$1 DIRNAME=DIRNAME$文件 如果[-z$DIRNAME];然后 回显错误没有文件路径 出口1 fi 但这不起作用。当没有文件路径时,实际dirname$file仍然返回。到目录名,即此目录。那么,我该如何区分两者呢。和/布拉/布拉/布拉 谢谢。为什么不使用 if [ -a $1] ; then echo "found file"; fi ?您确定

我试图测试在将文件传递到脚本时是否存在目录路径。我使用dirname剥离并保存路径。我希望脚本仅在路径存在时运行。下面是我的尝试

文件=$1 DIRNAME=DIRNAME$文件

如果[-z$DIRNAME];然后 回显错误没有文件路径 出口1 fi

但这不起作用。当没有文件路径时,实际dirname$file仍然返回。到目录名,即此目录。那么,我该如何区分两者呢。和/布拉/布拉/布拉

谢谢。

为什么不使用

if [ -a $1] ; then echo "found file"; fi

您确定dirname正在检查文件系统是否存在?你在用什么操作系统?我相信大多数dirname都只是进行字符串操作。因此:

dirname /one/two/three
返回/one/two,即使/one不存在

也许这就是你想要的:

FILE=$1
DIRNAME=`dirname "$FILE"`
if [ ! -d "$DIRNAME" ]; then
    echo "$DIRNAME doesn't exist" >&2
    exit 1
fi

无论文件路径是否存在,都是如此。我如何测试DIRNAME是否已填充或保持;那么我不知道为什么这在早些时候不起作用。一定是在别的地方弄错了。非常感谢你的快速回复。保罗,我很高兴你能找到答案——很抱歉我的回复不是你想要的。打字错误使你发布的代码无法工作,这很容易制作,也很难发现:好的,谢谢你。我稍后再查。我有一件事需要尽快完成。