小编And*_*ndy的帖子

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

我正在尝试在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
Run Code Online (Sandbox Code Playgroud)

这是输出:

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/ …
Run Code Online (Sandbox Code Playgroud)

bash shell

135
推荐指数
4
解决办法
21万
查看次数

标签 统计

bash ×1

shell ×1