免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1385 | 回复: 9
打印 上一主题 下一主题

求助:关于条件测试的“或” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-10-28 11:45 |只看该作者 |倒序浏览
现有一个shell语句:
if [ -s *.txt -o -s *.sql -o -s *.tar -o -s *.sh -o -s *.cfg ]; then
         ............................
else
         ............................
fi
测试发现如果只有两三种满足条件的文件存在,此语句可以正确执行;
但是如果超过这个数目,如同时有test.sql,zz.txt,a.tar,yes.cfg存在,
就不能正确执行,进入了else流程,并且报错test: syntax error

请问这是什么原因?该如何解决?

运行环境:SCO UNIX 5.05

论坛徽章:
0
2 [报告]
发表于 2003-10-28 11:47 |只看该作者

求助:关于条件测试的“或”

哦,刚才说错了,好象是同一种后缀名的文件存在多个就会出现问题

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-10-28 11:54 |只看该作者

求助:关于条件测试的“或”

是的!同一后缀一个以上时会出错的
因为表达式经过shell扩展后变样了:
例如:
[ -s 1.sql 2.sql ]这样的表达式肯定通不过。

论坛徽章:
0
4 [报告]
发表于 2003-10-28 11:57 |只看该作者

求助:关于条件测试的“或”

那么有什么办法可以解决这个问题呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-10-28 11:58 |只看该作者

求助:关于条件测试的“或”

可能不太好办!

论坛徽章:
0
6 [报告]
发表于 2003-10-28 12:01 |只看该作者

求助:关于条件测试的“或”

ls |cut -d. -f2 |sort ......... >tmp

sort 有去除重复行的参数吧?忘了。。。。

论坛徽章:
0
7 [报告]
发表于 2003-10-28 12:47 |只看该作者

求助:关于条件测试的“或”


  1. if $(echo \
  2.        $(for i in *.txt; do                                  \
  3.               echo "test -s $i &&" ;                      \
  4.            done ;                                                \
  5.            echo "test 1")                                      \
  6.        | sh);
  7. then
  8.     echo ok ;
  9. fi
  10. ok
复制代码


思路:
构造一个 test -s a.txt && test -s b.txt && test -s c.txt && test 1
的命令,然后交给 sh 值性,

测试:
如果当前目录下存在以 .txt为扩展名称的的空文件,
会执行 else

如果所有 .txt 文件都不是空文件,就可以打印 ok

论坛徽章:
0
8 [报告]
发表于 2003-10-28 13:35 |只看该作者

求助:关于条件测试的“或”

呵呵,谢谢大家帮忙。
不过我的shell的目的是要把当前目录下满足条件的文件打包,然后传到远端主机去做更新。所以下面的判断也许效率更高吧,,,
ls |cut -d. -f2 |sort -u|egrep "sql|sh|tar|cfg|txt" > tmp
if [ -s tmp ]; then
        .........................
else
        .........................
fi
只是不知道如何把大小为0的文件过滤掉了。。。。
难道前面还要加个find . -size 0 -print -exec rm {} \;吗?好象过份了点。。。。

希望和大家共同进步!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-10-29 02:58 |只看该作者

求助:关于条件测试的“或”

這樣如何:
{ ls *.sql *.sh *.tar *.cfg *.txt 2>/dev/null | grep -q '.*'; } && {
........... # then to do
/bin/true
} || {
.......... # else to do
}

要是想到照顧到 size 大於 0 的話,第一行可如此寫:
{ find -size +0 -maxdepth 1 | grep -Eq '.sql$|.sh$|.tar$|.cfg$|.txt$'; } && {

论坛徽章:
0
10 [报告]
发表于 2003-10-29 09:18 |只看该作者

求助:关于条件测试的“或”

  呵呵,这里果然高手如云,网中兄帮我写的语句果然跟我的笨办法不可同日而语。
  尤其利用与或判断的特性控制流程的办法让人佩服。

  又学了一招,多谢多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP