Shell脚本中的文件名扩展和判断条件中的空格

要从server库里下载一些文件,就写脚本。在写的过程中遇到两个问题。

1. 文件名扩展
#!/bin/sh
A="core"
if [ "$A" == c* ];then
  echo "OK"
fi

运行脚本时,报错“[: too many arguments”。查了网上的一些资料知道是文件名扩展(File globbing)的原因。
运行脚本的目录下有这样几个文件:
cmdfile,core12,dirlist

在“[]”里c*进行了文件名扩展,它代表“cmdfile,core12”,[ "$A" == c* ]就展开为[ "$A" == cmdfile core12],所以报错“too many arguments”.
删除文件cmdfile,就不会有错。如果把文件core12改为core,会输出OK。

解决的方法是使用"[[ ]]"。
#!/bin/sh
A="core"
if [[ "$A" == c* ]];then
  echo "OK"
fi

使用"[[ ]]"进行判断同时也避免了单词分割"word splitting"。参考http://mywiki.wooledge.org/WordSplitting

2.注意判断条件的空格

需要找出一个目录以及子目录下所有的jar文件

#!/bin/sh
prntfiles(){
    cur_dir=$1
    for name in `find $cur_dir -name "*"`;  do
    if [ -f $name ]; then
      if [[ "$name"==*jar ]]; then
        echo $name
      fi

    fi
    done

}
prntfiles $1

用上面的脚本去运行,什么文件都能输出。很纳闷。后来百度一下,看一些文档,知道了判断条件中要注意空格。
将if [[ "$name"==*jar ]]; then 改为
  if [[ "$name" == *jar ]]; then
问题就解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值