提供Discuz ,ECShop ,PHPCMS ,帝国CMS ,CSS教程 ,PHP教程 ,DedeCMS ,WordPress ,HTML教程等cms问题查询.
当前位置: 运维 > Linux > 怎样搜检Bash中是不是存在文件或目次【Linux】,Bash,linux

很多时刻,在编写Shell剧本时,须要依据文件是不是存在来实行操纵。那末怎样搜检文件是不是存在?下面本篇文章就来带人人相识怎样运用test敕令来搜检Bash中是不是存在文件或目次,愿望对人人有所协助。

test敕令

在Bash中,能够运用test敕令搜检文件是不是存在并肯定文件的范例。

test敕令采纳以下语法情势之一:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

假如愿望剧本是可移植的,那末应当更喜好运用在所有POSIX shell上都可用的旧test [ 敕令。在大多数运用bash、zsh和ksh作为默许shel的当代体系上,都支撑测试敕令[[(双括号)的新升级版本。

test敕令的File操纵符

test敕令包括以下File操纵符,许可测试特定范例的文件:

 ● -b FILE :假如FILE存在且为块特别文件,则为True。

 ● -c FILE :假如FILE存在且为特别字符文件,则为True。

 ● -d FILE :假如FILE存在且为目次,则为True。

 ● -e FILE :假如FILE存在且为文件,则为True,不论范例(节点,目次,套接字等)怎样。

 ● -f FILE :假如FILE存在且为通例文件(不是目次或装备),则为True。

 ● -G FILE :假如FILE存在且与运转敕令的用户具有雷同的组,则为True。

 ● -h FILE :假如FILE存在且为标记链接,则为True。

 ● -g FILE :假如FILE存在且设置了set-group-id(sgid)标志,则为True。

 ● -k FILE :假如FILE存在且设置了粘滞位标志,则为True。

 ● -L FILE :假如FILE存在且为标记链接,则为True。

 ● -O FILE :假如FILE存在而且由运转该敕令的用户具有,则为True。

 ● -p FILE :假如FILE存在且为管道,则为True。

 ● -r FILE :假如FILE存在且可读,则为True。

 ● -S FILE :假如FILE存在且为套接字,则为True。

 ● -s FILE :假如FILE存在且非零大小,则为True。

 ● -u FILE :假如设置了exists和set-user-id(suid)标志,则为True。

 ● -w FILE :假如FILE存在且可写,则为True。

 ● -x FILE :假如FILE存在且可实行,则为True。

怎样搜检文件是不是存在?

在搜检文件是不是存在时,最经常使用的FILE操纵符是-e和-f。第一个操纵符将搜检文件是不是存在,而不论文件范例怎样;第二个操纵符将仅在文件是通例文件(不是目次或装备)时返回true。

搜检文件是不是存在时,最可读的选项是连系运用test敕令和if语句。以下任何代码段都将搜检/etc/resolv.conf文件是不是存在:

FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exist"
fi

假如要依据文件是不是存在实行差别的操纵,只需运用if / then组织:

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
else 
    echo "$FILE does not exist"
fi

注:在处置惩罚称号中包括空格的文件时,请一直运用双引号以防止出现问题。

也能够运用不带if语句的test敕令。仅当测试敕令的退出状况为true时,才会实行&&运算符后的敕令,

test -f /etc/resolv.conf && echo "$FILE exist"
[ -f /etc/resolv.conf ] && echo "$FILE exist"
[[ -f /etc/resolv.conf ] && echo "$FILE exist"

假如要在&&运算符以后运转一系列敕令,只需将敕令括在以“;”或“&&”分开的大括号中即可。

[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }

与&相反,||运算符背面的语句只在测试敕令的退出状况为false时实行。

[ -f /etc/resolv.conf ] && echo "$FILE exist" || echo "$FILE does not exist"

怎样搜检目次是不是存在?

-d运算符许可测试文件是不是是目次。

比方,要搜检/etc/docker目次是不是存在,须要运用:

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory"
fi
[ -d /etc/docker ] && echo "$FILE is a directory"

一样,也能够运用双括号[[而不是单个括号[。

怎样搜检文件是不是不存在?

与很多其他言语相似,能够运用!(感叹号)逻辑非运算符来否认测试表达式:

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE exist and it is a directory"
fi

与上述雷同:

[ ! -f /etc/docker ] || echo "$FILE does not exist"

怎样搜检是不是存在多个文件?

假如存在多个文件,能够运用-a(或&&with[])来测试,而不是运用庞杂的嵌套if/else组织:

FILE=/etc/docker
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
FILE=/etc/docker
if [ -f /etc/resolv.conf && -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi

不运用IF语句的等效变体:

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "both files exist"
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "both files exist"

相干视频教程引荐:《Linux教程》

以上就是本篇文章的全部内容,愿望能对人人的进修有所协助。更多精彩内容人人能够关注ki4网相干教程栏目!!!

以上就是怎样搜检Bash中是不是存在文件或目次的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"怎样搜检Bash中是不是存在文件或目次【Linux】,Bash,linux"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线