如何检查/bin/x86_64/bin/ls
bash shell 脚本中是否是一个目录
这是我尝试过的:
#!/bin/bash
if [ $# -eq 2 ]; then
if [[ "$1" = /* ]]
then
cd ./bin/x86_64/bin/ls
if [ -d "$1" ]; then
echo "ok"
i="$1"
echo $i
else
echo "error2"
exit
fi
else
echo "error"
exit
fi
fi
答案1
您可以使用以下命令来检查目录是否存在:
if [[ -d "$1" ]]; then
如果您想检查您将使用的任何文件
if [[ -e "$1" || -L "$1" ]]; then
如果您想检查文件是否是常规文件(或常规文件的符号链接),但不是目录(或设备、套接字、命名管道...)文件,那么您可以使用:
if [[ -f "$1" ]]; then
如果文件可能存在但您想确保它的大小不为零:
if [[ -s "$1" ]] then;
所有这些测试都基于stat()
系统调用的结果(除了-L
依赖lstat()
)。如果您无权对文件进行此类调用(例如,因为您没有对文件所在目录或参与符号链接文件解析的目录的搜索访问权限),那么这些测试将默默返回 false,就好像文件不存在一样。
[[ ... ]]
是一个运算符,也受andksh
支持。标准等效项(在 中使用)是使用命令(对于上面的第二个示例,使用)。bash
zsh
sh
[
[ -e "$1" ] || [ -L "$1" ]
答案2
如果您的目录cd
确实存在,您的代码就可以工作。
我将该cd
行更改为系统上的目录(diff):
- cd ./bin/x86_64/bin/ls
+ cd /bin/
然后跑:
ry@~/Desktop:$ sh test /bin /
ok
/bin
请注意,您必须为脚本提供两个参数,因为:if [ $# -eq 2 ]; then
另请注意,./bin/
实际上与 相同bin/
。
答案3
要检查 shell 脚本中是否存在目录,可以使用以下命令:
dir=$1
if [ -d "$dir" ]; then
#means that $dir exists.
fi
要检查相反的情况,请添加!在 -d -> 之前[ ! -d ....]