加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

检查传递的参数是否为BASH中的文件或目录

发布时间:2020-12-15 16:39:56 所属栏目:安全 来源:网络整理
导读:我试图在Ubuntu中写一个非常简单的脚本,这将允许我传递它一个文件名或目录,并能够做一些特定的,当它是一个文件,当别名,当它是一个目录。我所遇到的问题是当目录名,或者可能的文件,在名称中有空格或其他可转义字符。 这里是我的基本代码下面,和几个测
我试图在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测试一个路径是否存在,而不测试它是什么类型的文件。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读