免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bclly
打印 上一主题 下一主题

[文件目录] bash中,如何准确判断某类型文件存在 [已解决] [复制链接]

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
21 [报告]
发表于 2014-07-15 22:15 |只看该作者
回复 20# 用户名注册后不能更改


    &&是与,||是或

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
22 [报告]
发表于 2014-07-15 22:45 |只看该作者
回复 4# Herowinter
坐了一天火车。。。现在才看
我是这个意思,这样就可以以你输入的后缀名为参数,查看是否存在这类后缀名
不过貌似有点绕哈哈
  1. #!/bin/bash
  2. suffix=$1
  3. ls | awk '{print tolower($0)}' | awk -F\. -v pt=$suffix '{if($2==pt)exist++}END{if(exist>0){print pt " Exist"}else{print pt " not exists"}}'
复制代码
测试结果:
  1. [xxx@localhost testfile]$ ls
  2. a  abc.GIF  b  c  cad.cpp  test.sh
  3. [xxx@localhost testfile]$ sh test.sh gif
  4. gif Exist
  5. [xxx@localhost testfile]$ sh test.sh cpp
  6. cpp Exist
  7. [xxx@localhost testfile]$ sh test.sh c
  8. c not exists
  9. [xxx@localhost testfile]$
复制代码

论坛徽章:
0
23 [报告]
发表于 2014-07-16 01:39 |只看该作者
回复 22# Shell_HAT

晕,我理解错了,没仔细看楼主帖,还以为是想表达TTf或TTF。

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
24 [报告]
发表于 2014-07-16 09:00 |只看该作者
回复 24# 用户名注册后不能更改
捡到一个世界杯徽章了?做个纪念吧。

   

论坛徽章:
1
摩羯座
日期:2014-07-16 14:52:12
25 [报告]
发表于 2014-07-16 09:25 |只看该作者
回复 20# 用户名注册后不能更改


    && 是 与,多个条件要同时成立;  ||是或,只成立一个

论坛徽章:
1
摩羯座
日期:2014-07-16 14:52:12
26 [报告]
发表于 2014-07-16 09:46 |只看该作者
回复 19# Buring__


    是的,也可以这样写。我发觉这个语法自由度还是算大!

论坛徽章:
1
摩羯座
日期:2014-07-16 14:52:12
27 [报告]
发表于 2014-07-16 11:07 |只看该作者
回复 16# Herowinter


[root@hostname 桌面]# ls
msyhbd.TTF  msyh.TTF  pattern.sh  判断字体安装工具.sh
[root@hostname 桌面]# ./pattern.sh *.ttf && echo '*.ttf exists!' || echo '*.ttf not exists!'
./pattern.sh: line 5: [: msyhbd.TTF: binary operator expected
*.ttf not exists!
[root@hostname 桌面]# ./pattern.sh *.TTF && echo '*.TTF exists!' || echo '*.TTF not exists!'
*.TTF exists!
[root@hostname 桌面]#



    还是达不到目的,仍然无法判断后缀名的大小写。我要达成的目标就是: 因为后缀名不管怎么变,文件是不变的,那么,后缀名只要是*.ttf,就可以不管它是大写还是小写,它可以是TTF,也可以是tTF 或者 Ttf、TTf之类各种可能…… 这都属于是文件存在。

我现在想了一个非常笨的办法:
  1. #!/bin/bash
  2. if [ -f *.TTF ] || [ -f *.ttf ] || [ -f *.TTf ] || [ -f *.Ttf ] || [ -f *.tTF ] || [ -f*ttF ] || [ -f *.TtF ] || [ -f *.tTf ];then
  3.     echo "字体存在!"
  4. else
  5.     echo "字体不存在,请先获取他们!"
  6.     read -n 1 -p "任意键退出本程序!"
  7.     exit 0;
  8. fi
复制代码
自己都觉得很2啊!! 还是按照这个想法,写成一个函数,for 来循环对比 能不能显得稍微科学一些?

而且发觉,只要做对比判断,如果涉及多个文件后缀名一致,就会输出一个 "binary operator expected"
无奈了~

论坛徽章:
1
摩羯座
日期:2014-07-16 14:52:12
28 [报告]
发表于 2014-07-16 11:12 |只看该作者
回复 23# Kasiotao


    也不行,后缀名大小写一换,判断就失效。

[root@hostname 桌面]# ls
if.sh  msyhbd.TTF  msyh.ttf  pattern.sh  判断字体安装工具.sh
[root@hostname 桌面]# bash if.sh ttf
ttf Exist
[root@hostname 桌面]# bash if.sh TTF
TTF not exists
[root@hostname 桌面]# bash if.sh Ttf
Ttf not exists
[root@hostname 桌面]#

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
29 [报告]
发表于 2014-07-16 11:14 |只看该作者
本帖最后由 Herowinter 于 2014-07-16 11:14 编辑

回复 28# bclly

[ -f *.[Tt][Tt][Ff] ]就可以了,我贴的那段awk代码也是把输入的
*.ttf转换成*.[Tt][Tt][Ff],我这边测试的时候可以的。
   

论坛徽章:
1
摩羯座
日期:2014-07-16 14:52:12
30 [报告]
发表于 2014-07-16 11:16 |只看该作者
回复 21# zhleiling


    -E这个参数到现在都无法理解到底是什么作用,翻译的是:“-E或--extended-regexp   将范本样式为延伸的普通表示法来使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP