1. #!/bin/bash
    root_src=$(dirname $(PWD))
  2. bundle_name='RandomDebbot.bundle'
  3. target_path=$root_src/ecovacs/ecovacs/Vender/RobotSDK/Resource/$bundle_name
  4. echo $target_path
  5. rm -rf $target_path #强制删除目录命令rm -rf
  6. bundle_path=${TARGET_BUILD_DIR}/$bundle_name
  7. cp -R $bundle_path $target_path

上面是一个简单的不同工程中的资源文件copy脚本。

一)dirname - 截取给定路径的目录部分

  1. shellPath=$(cd "$(dirname "$")"; pwd)
  2. echo $shellPaht

二)basename -用于去掉文件名的目录和后缀

  1. root_src=$(dirname $(PWD))
  2. echo $root_src
  3. AFNET_Lib_Path=$root_src/EcoRobotCoreLib/EcoRobotCoreLib/CommonLib/Utils/AFNetworking
  4. AFNET_SDK_Path=$root_src/EcoRobotSDK/EcoRobotSDK/CommonLib/include/AFNetworking
  5. find ${AFNET_Lib_Path} -name *.h -exec cp {} ${AFNET_SDK_Path} \;

 三) ${}、##和%%使用范例

  1. 介绍下Shell中的${}、##和%%使用范例,本文给出了不同情况下得到的结果。
    假设定义了一个变量为:
    代码如下:
    file=/dir1/dir2/dir3/my.file.txt
    可以用${ }分别替换得到不同的值:
    ${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
    ${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
    ${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
    ${file##*.}:删掉最后一个 . 及其左边的字符串:txt
    ${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
    ${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)
    ${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
    ${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
    记忆的方法为:
    # 是 去掉左边(键盘上#在 $ 的左边)
    %是去掉右边(键盘上% 在$ 的右边)
    单一符号是最小匹配;两个符号是最大匹配
    ${file:0:5}:提取最左边的 5 个字节:/dir1
    ${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
    也可以对变量值里的字符串作替换:
    ${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
    ${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt
  2.  
  3. 四)用脚本来更换Info中的当前日期。
  1. #!/bin/bash
  2. root_src=$(dirname $(PWD))
  3. echo ${root_src}
    EcoRobotSDK_InfoPlist=${root_src}/test/Info.plist
  4. echo ${EcoRobotSDK_InfoPlist}
  5. # cat ${EcoRobotSDK_InfoPlist}
  6. Today=`date +"%2Y%m%d" ` #提取当前日期
  7. echo ${Today} #
  8. echo ${Today::} #从左边第几个字符开始,及字符的个数 170503
    #按如下正则表达式要求搜索并替换为当前日期
  9. sed -i "" "s#<string>[0-9]\{4,\}<\/string>#<string>${Today:2:6}<\/string>#" ${EcoRobotSDK_InfoPlist}

#/usr/libexec/PlistBuddy -c "Set :VersionDate ${Today:2:6}" ${EcoRobotSDK_InfoPlist}    #这个同上一句意思相同,而且效果更好

五) copyXcode资源文件的脚本

  1. #!/bin/bash
  2.  
  3. #项目根目录
  4. root_src=$(dirname $(PWD))
  5. #CoreLib头文件目录
  6. EcoCoreLib_Path=${root_src}/EcoRobotCoreLib;
  7. #EcoRobotSDK中CoreLib头文件所在根目录
  8. EcoRobotSDK_Header_Path=${root_src}/EcoRobotSDK/EcoRobotSDK/CommonLib
  9. #AFNet_Lib_Path=${EcoCoreLib_Path}/EcoRobotCoreLib/CommonLib/Utils/AFNetworking
  10.  
  11. #找出CoreLib中的头文件
  12. EcoCoreLib_Head_Files=`find ${EcoCoreLib_Path} -name "*.h"`
  13. for file in $EcoCoreLib_Head_Files
  14. do
  15. #取出名字
  16. filename=`basename ${file}`
  17. #找出头文件在EcoRobotSDK中的位置;如果头文件存在就copy过去
  18. SDK_Files=`find ${EcoRobotSDK_Header_Path} -name ${filename}`
  19. echo ${SDK_Files}
  20. if [[ -e ${SDK_Files} ]]; then
  21. cp -f ${file} ${SDK_Files}
  22. fi
  23. done

这个脚本有问题,  SDK_Files 其实是有值的,为空,所以它一直存在。所以还是每次都要copy

  1. diff ${file} ${SDK_Files}
  2. if [[ $ != && -e ${SDK_Files} ]];
  3. then
  4. cp -f ${file} ${SDK_Files}
  5. fi
  1. $0 是上一执行命令的返回值
  1. diff 命令返回值为 0,说明两个文件相同, 否则两个文件不相同。

更改后的

  1. #项目根目录
  2. root_src=$(dirname $(PWD))
  3. #CoreLib头文件目录
  4. EcoCoreLib_Path=${root_src}/EcoRobotCoreLib;
  5. #EcoRobotSDK中CoreLib头文件所在根目录
  6. EcoRobotSDK_Header_Path=${root_src}/EcoRobotSDK/Class/StaticLibaryHeaders
  7. #AFNet_Lib_Path=${EcoCoreLib_Path}/EcoRobotCoreLib/CommonLib/Utils/AFNetworking
  8.  
  9. #目标文件夹不存在就退出,不执行
  10. if [ ! -d ${EcoRobotSDK_Header_Path} ]; then
  11. echo "目标文件夹不存在"
  12. exit
  13. fi
  14. #源文件夹不存在就退出,不执行
  15. if [ ! -d ${EcoCoreLib_Path} ]; then
  16. echo "源文件夹不存在"
  17. exit
  18. fi
  19.  
  20. #找出CoreLib中的头文件
  21. EcoCoreLib_Head_Files=`find ${EcoCoreLib_Path} -name "*.h"`
  22. for file in $EcoCoreLib_Head_Files
  23. do
  24. #取出名字
  25. filename=`basename ${file}`
  26. #找出头文件在EcoRobotSDK中的位置;如果SDK中有这个头文件,且两个文件不一样就copy过去
  27. SDK_Files=`find ${EcoRobotSDK_Header_Path} -name ${filename}`
  28. #echo "${SDK_Files} 存在"
  29. if [[ -n ${SDK_Files} && -w ${SDK_Files} ]]; #前面判断字符串是否为空。
  30. then
  31. diff -bH ${file} ${SDK_Files}
  32. if [ $? != ]
  33. then
  34. cp -f ${file} ${SDK_Files}
  35. fi
  36. fi
  37. done

http://blog.csdn.net/guo8113/article/details/39430335

六)删除项目中无用图片

  1. #!/bin/sh
  2. PROJ=`find . -name '*.xib' -o -name '*.[mh]'`
  3.  
  4. for png in `find . -name '*.png'`
  5. do
  6. name=`basename $png`
  7. if ! grep -qhs "$name" "$PROJ"; then
  8. echo "$png is not referenced"
  9. fi
  10. done
-o 是或者的意思
-a 是而且的意思
-not 是相反的意思
  1. #! /bin/bash
  2. #组装的ImageName未检查出来
  3. for i in `find . -name "*.png" -o -name "*.jpg"`; do
  4. imageName =
  5. file=`basename -s .jpg "$i" | xargs basename -s .png | xargs basename -s @2x | xargs basename -s @3x`
  6. result=`ack -i "$file"`
  7. # echo "result: \n $result"
  8. if [ -z "$result" ]; then
  9. echo "$i"
  10. echo "$i 疑似没有引用" >>image_delete.txt
  11. # 如果需要,可以直接执行删除:
  12. # rm "$i"
  13. fi
  14. done
 

Shell脚本,更改Info.plist中的日期等的更多相关文章

  1. shell脚本事例 -- 获取当前日期的前一天日期

    记录一个shell脚本事例,事例中包括shell的一些语法(函数定义.表达式运算.if.case...) #!/bin/sh #获取当前时间 RUN_TIME=`date +%H%M%S` #取当前日 ...

  2. 利用Shell脚本将MySQL表中的数据转化为json格式

    脚本如下: #!/bin/bash mysql -s -phello test >.log <<EOF desc t1; EOF lines="concat_ws(',', ...

  3. 通过Shell脚本读取properties文件中的参数时遇到\r换行符的问题

    今天在编写微服务程序启动脚本的时候,遇到一个比较奇葩的问题,下面给出具体描述: 目标:通过读取maven插件打包时生成的pom.properties文件,获取里面的应用名称和应用版本号,然后拼接得到s ...

  4. 常用shell脚本(持续更新中)

    1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. 答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd. #!/b ...

  5. 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

    现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...

  6. shell脚本练习题(更新中...)

    练习题(这里贴的是自己写的代码, 网上给的题目代码我会附加在最下面) 1. 编写shell脚本,计算1-100的和: #!/bin/bash #caculate the to `; do sum=$[ ...

  7. (原创)Windows下编译的Shell脚本不能再Linux中运行的解决办法

    一.原理 Windows编译的文件和Linux编译的文件格式不太一样,导致在Linux运行Shell脚本的时候会提示:/bin/bash^M: bad interpreter: 没有那个文件或目录. ...

  8. centos使用shell脚本定时备份docker中的mysql数据库

    shell脚本 #!/bin/bash #容器ID container_id="6b1faea2b4d7" #登录用户名 mysql_user="root" # ...

  9. shell 脚本sed替换文件中某个字符串

    有些大文件,特别的大.有几百兆,甚至更大. 用文本编辑器打开十分的费劲,电脑都卡死了. 想替换其中的字符串,很麻烦. 这个时候有了shell,简直强大到爆炸! # du -h user.sql 304 ...

随机推荐

  1. Java中通过Class类获取Class对象的方法详解

    方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码 ...

  2. MyBatis基础入门《十九》动态SQL(set,trim)

    MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...

  3. c#之枚举,结构体

    1.枚举 2.结构体 例子1: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  4. 关于c语言中的program_invocation_short_name

    错误源自用g++的交叉编译工具链编译eudev.经过一番查找,发现在 errno.h 这个头文件中有 program_invocation_short_name 的 extern 定义. 经过查看 e ...

  5. shell文件的编写

    见文章http://www.cnblogs.com/handsomecui/p/5869361.html

  6. Python杨辉三角

    杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个 ...

  7. 【转】通过Excel生成批量SQL语句,处理大量数据

    经常会遇到这样的要求:用户给发过来一些数据,要我们直接给存放到数据库里面,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL里面用Insert into来实 ...

  8. Python 7 -- 文件存储数据

    上一节总结了一个基本web应用的代码,这一节主要讲用户访问的数据记录在log文件中,并显示在页面上. 这节步骤: 按以下目录建好相应的文件夹及内容 webapp|----vsearch4web.py ...

  9. Lua 判断表是否为空方法

    [1]判断表为空的方法 目前为止,Lua语言中判断table表是否为空有三种方式: (1)#table,当table为数组时直接返回table表的长度. (2)当table是字典时,返回table的长 ...

  10. Python爬虫【四】Scrapy+Cookies池抓取新浪微博

    1.设置ROBOTSTXT_OBEY,由true变为false 2.设置DEFAULT_REQUEST_HEADERS,将其改为request headers 3.根据请求链接,发出第一个请求,设置一 ...