要从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
问题就解决了。