Shell 脚本编写的几点记录
Title: Shell 脚本编写的几点记录
- 数值变量
size=1000
#注意,不要有多余的空格
-
文件名的处理
- 不带空格的文件名,可以用数组来解决
filelist=(`ls`)
filelist=(`find . -iname "*.jpg"`)
23. 带空格的文件名的处理
find . -size +$size -iname "*.jpg"|grep -v "\._" |gawk -F, '{printf("%s\n",$0)}' | while read line
#说明 find是用来显示文件名的,这个比 ls 好在是带路径的,比较好处理,可以直接用文件名。
#grep 是用来去掉 以 "._"开头的文件,mac里,有很多这样的文件。
#gawk 是把文件名加上换行,方便以行为单位读取,解决文件名中带空格的问题。
#文件名用有空格,真的会带来很多无聊的问题
do
#echo ---------- $line
nospace=`echo $line|tr " " "_"`
#下面 对于有空格的,要加双引号
mv "$line" $nospace
done
- if中的问题
if [ $ff_len -eq 0 ]
then
echo 没有条件的文件可以压缩
echo 条件:jpg文件大小\>900k
exit
# if 中用判断,也可注意空格的问题
# 如果变量没有定义或者为空,会出错,建议先初始化一下。
- 数组问题
#引用数组全部元素
${ff[@]}
#获取数组长度
${#ff[@]}
- 命令行参数
if [ $# -eq 1 ]
then
smallsize="$1%x%$1%"
else
smallsize="50%x50%" #默认按50%调整大小
fi
$# 这个是指参数个数,不包括文件名
$? 上下个命令的返回值
- 在脚本中执行系统命令中的引号问题
#下面 对于有空格的,要加双引号 $line中的文件名有空格,所以加了双引号,经测试,不加双引号要出错。
mv "$line" $nospace
len=`ls -l "$i" |gawk '{printf("%d", $5/1024/1024)}'`