Shell 脚本编写的几点记录

written in script, terminal, image, mac

Title: Shell 脚本编写的几点记录

  1. 数值变量
    size=1000
    #注意,不要有多余的空格
  1. 文件名的处理

    1. 不带空格的文件名,可以用数组来解决
                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
  1. if中的问题
   if [ $ff_len -eq 0 ]
   then
       echo 没有条件的文件可以压缩
       echo 条件:jpg文件大小\>900k
       exit 
   # if 中用判断,也可注意空格的问题
   # 如果变量没有定义或者为空,会出错,建议先初始化一下。
  1. 数组问题
    #引用数组全部元素
    ${ff[@]}

    #获取数组长度
    ${#ff[@]}
  1. 命令行参数
    if [ $# -eq 1 ]
    then
        smallsize="$1%x%$1%"
    else
        smallsize="50%x50%"  #默认按50%调整大小
        fi
    $# 这个是指参数个数,不包括文件名

    $? 上下个命令的返回值
  1. 在脚本中执行系统命令中的引号问题
#下面 对于有空格的,要加双引号 $line中的文件名有空格,所以加了双引号,经测试,不加双引号要出错。
mv "$line"  $nospace
len=`ls -l "$i" |gawk '{printf("%d", $5/1024/1024)}'`