gpt4 book ai didi

bash - 检查传递的参数是 Bash 中的文件还是目录

转载 作者:行者123 更新时间:2023-11-29 08:38:26 26 4
gpt4 key购买 nike

我正在尝试在 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 测试路径是否存在而不测试它是什么类型的文件。

关于bash - 检查传递的参数是 Bash 中的文件还是目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4665051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com