Shell脚本,更改Info.plist中的日期等
#!/bin/bash
root_src=$(dirname $(PWD))
bundle_name='RandomDebbot.bundle'
target_path=$root_src/ecovacs/ecovacs/Vender/RobotSDK/Resource/$bundle_name
echo $target_path
rm -rf $target_path #强制删除目录命令rm -rf
bundle_path=${TARGET_BUILD_DIR}/$bundle_name
cp -R $bundle_path $target_path
上面是一个简单的不同工程中的资源文件copy脚本。
一)dirname - 截取给定路径的目录部分
shellPath=$(cd "$(dirname "$")"; pwd)
echo $shellPaht
二)basename -用于去掉文件名的目录和后缀
root_src=$(dirname $(PWD))
echo $root_src
AFNET_Lib_Path=$root_src/EcoRobotCoreLib/EcoRobotCoreLib/CommonLib/Utils/AFNetworking
AFNET_SDK_Path=$root_src/EcoRobotSDK/EcoRobotSDK/CommonLib/include/AFNetworking
find ${AFNET_Lib_Path} -name *.h -exec cp {} ${AFNET_SDK_Path} \;
三) ${}、##和%%使用范例
介绍下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 四)用脚本来更换Info中的当前日期。
#!/bin/bash
root_src=$(dirname $(PWD))
echo ${root_src}
EcoRobotSDK_InfoPlist=${root_src}/test/Info.plist
echo ${EcoRobotSDK_InfoPlist}
# cat ${EcoRobotSDK_InfoPlist}
Today=`date +"%2Y%m%d" ` #提取当前日期
echo ${Today} #
echo ${Today::} #从左边第几个字符开始,及字符的个数 170503
#按如下正则表达式要求搜索并替换为当前日期
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资源文件的脚本
#!/bin/bash #项目根目录
root_src=$(dirname $(PWD))
#CoreLib头文件目录
EcoCoreLib_Path=${root_src}/EcoRobotCoreLib;
#EcoRobotSDK中CoreLib头文件所在根目录
EcoRobotSDK_Header_Path=${root_src}/EcoRobotSDK/EcoRobotSDK/CommonLib
#AFNet_Lib_Path=${EcoCoreLib_Path}/EcoRobotCoreLib/CommonLib/Utils/AFNetworking #找出CoreLib中的头文件
EcoCoreLib_Head_Files=`find ${EcoCoreLib_Path} -name "*.h"`
for file in $EcoCoreLib_Head_Files
do
#取出名字
filename=`basename ${file}`
#找出头文件在EcoRobotSDK中的位置;如果头文件存在就copy过去
SDK_Files=`find ${EcoRobotSDK_Header_Path} -name ${filename}`
echo ${SDK_Files}
if [[ -e ${SDK_Files} ]]; then
cp -f ${file} ${SDK_Files}
fi
done
这个脚本有问题, SDK_Files 其实是有值的,为空,所以它一直存在。所以还是每次都要copy
diff ${file} ${SDK_Files}
if [[ $ != && -e ${SDK_Files} ]];
then
cp -f ${file} ${SDK_Files}
fi
$0 是上一执行命令的返回值
diff 命令返回值为 0,说明两个文件相同, 否则两个文件不相同。
更改后的
#项目根目录
root_src=$(dirname $(PWD))
#CoreLib头文件目录
EcoCoreLib_Path=${root_src}/EcoRobotCoreLib;
#EcoRobotSDK中CoreLib头文件所在根目录
EcoRobotSDK_Header_Path=${root_src}/EcoRobotSDK/Class/StaticLibaryHeaders
#AFNet_Lib_Path=${EcoCoreLib_Path}/EcoRobotCoreLib/CommonLib/Utils/AFNetworking #目标文件夹不存在就退出,不执行
if [ ! -d ${EcoRobotSDK_Header_Path} ]; then
echo "目标文件夹不存在"
exit
fi
#源文件夹不存在就退出,不执行
if [ ! -d ${EcoCoreLib_Path} ]; then
echo "源文件夹不存在"
exit
fi #找出CoreLib中的头文件
EcoCoreLib_Head_Files=`find ${EcoCoreLib_Path} -name "*.h"`
for file in $EcoCoreLib_Head_Files
do
#取出名字
filename=`basename ${file}`
#找出头文件在EcoRobotSDK中的位置;如果SDK中有这个头文件,且两个文件不一样就copy过去
SDK_Files=`find ${EcoRobotSDK_Header_Path} -name ${filename}`
#echo "${SDK_Files} 存在"
if [[ -n ${SDK_Files} && -w ${SDK_Files} ]]; #前面判断字符串是否为空。
then
diff -bH ${file} ${SDK_Files}
if [ $? != ]
then
cp -f ${file} ${SDK_Files}
fi
fi
done
http://blog.csdn.net/guo8113/article/details/39430335
六)删除项目中无用图片
#!/bin/sh
PROJ=`find . -name '*.xib' -o -name '*.[mh]'` for png in `find . -name '*.png'`
do
name=`basename $png`
if ! grep -qhs "$name" "$PROJ"; then
echo "$png is not referenced"
fi
done
-o 是或者的意思
-a 是而且的意思
-not 是相反的意思
#! /bin/bash
#组装的ImageName未检查出来
for i in `find . -name "*.png" -o -name "*.jpg"`; do
imageName =
file=`basename -s .jpg "$i" | xargs basename -s .png | xargs basename -s @2x | xargs basename -s @3x`
result=`ack -i "$file"`
# echo "result: \n $result"
if [ -z "$result" ]; then
echo "$i"
echo "$i 疑似没有引用" >>image_delete.txt
# 如果需要,可以直接执行删除:
# rm "$i"
fi
done
Shell脚本,更改Info.plist中的日期等的更多相关文章
- shell脚本事例 -- 获取当前日期的前一天日期
记录一个shell脚本事例,事例中包括shell的一些语法(函数定义.表达式运算.if.case...) #!/bin/sh #获取当前时间 RUN_TIME=`date +%H%M%S` #取当前日 ...
- 利用Shell脚本将MySQL表中的数据转化为json格式
脚本如下: #!/bin/bash mysql -s -phello test >.log <<EOF desc t1; EOF lines="concat_ws(',', ...
- 通过Shell脚本读取properties文件中的参数时遇到\r换行符的问题
今天在编写微服务程序启动脚本的时候,遇到一个比较奇葩的问题,下面给出具体描述: 目标:通过读取maven插件打包时生成的pom.properties文件,获取里面的应用名称和应用版本号,然后拼接得到s ...
- 常用shell脚本(持续更新中)
1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. 答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd. #!/b ...
- 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中
现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...
- shell脚本练习题(更新中...)
练习题(这里贴的是自己写的代码, 网上给的题目代码我会附加在最下面) 1. 编写shell脚本,计算1-100的和: #!/bin/bash #caculate the to `; do sum=$[ ...
- (原创)Windows下编译的Shell脚本不能再Linux中运行的解决办法
一.原理 Windows编译的文件和Linux编译的文件格式不太一样,导致在Linux运行Shell脚本的时候会提示:/bin/bash^M: bad interpreter: 没有那个文件或目录. ...
- centos使用shell脚本定时备份docker中的mysql数据库
shell脚本 #!/bin/bash #容器ID container_id="6b1faea2b4d7" #登录用户名 mysql_user="root" # ...
- shell 脚本sed替换文件中某个字符串
有些大文件,特别的大.有几百兆,甚至更大. 用文本编辑器打开十分的费劲,电脑都卡死了. 想替换其中的字符串,很麻烦. 这个时候有了shell,简直强大到爆炸! # du -h user.sql 304 ...
随机推荐
- unity3d-解密加密数据
利用RijndaelManaged加密解码.需要导入命名空间 using System.Security.Cryptography; 一个很简单的例子,最终的结果 解密和加密类 public clas ...
- 记录一则完整的SPA(10g->11g)测试过程
生产端:Windows 2008 + Oracle 10.2.0.5 测试端:RHEL 6.5 + Oracle 11.2.0.4 需求:因为Oracle跨越大版本,优化器.新特性变动较多,需要进行S ...
- obv15 实例6:如果K线柱过多,ZIG将发生变动,导致明显的OBV15指标被隐藏!
obv
- BCB6.0 清除TPanel面板上的所有控件
方法一: panel->ComponentCount属性获得panel所拥有的控件个数 panel->Components[i]属性获得某一个控件 delete panel->Com ...
- 记前些日子archlinux更新后无法调节声音的解决方法
桌面环境用的是xfce4. 自从某次更新过后,panel中调节声音的插件变成了 xfce4-pulseaudio-plugin.然后就发现在panel中无法调节声音了. 在这个插件的属性中发现了一项设 ...
- Lua 服务器Socket通信实例
local socket = require"socket" local host = "127.0.0.1"local port = "843&qu ...
- 连接远程数据库时出现 SSH: expected key exchange group packet from server / 2003 - Can't connect to MySQL server on 'XXX' (10038) / 1130 - Host 'XXX' is not allowed to connect to this MySQL server
昨天在自己的远程服务器上玩,把系统重装了.新装了MySQL,在本地用navicat连接的时候出了几个小问题. 问题一:SSH: expected key exchange group packet f ...
- Python: 字典dict: zip()
problem: 怎样在数据字典中执行一些计算操作(比如求最小值.最大值.排序等等)? answer: eg1: 考虑下面的股票名和价格映射字典: prices = {'ACME': 45.23,'A ...
- flask模板的基本用法(定界符、模板语法、渲染模板),模板辅助工具(上下文、全局对象、过滤器、测试器、模板环境对象)
flask模板 在动态web程序中,视图函数返回的HTML数据往往需要根据相应的变量(比如查询参数)动态生成. 当HTML代码保存到单独的文件中时,我们没法再使用字符串格式化或拼接字符串的当时在HTM ...
- 面试题-JAVA算法题
1.编写一个程序,输入n,求n!(用递归的方式实现). public static long fac(int n){ if(n<=0) return 0; else if(n==1) retur ...