#!/bin/sh echo "Hello shell" # ----------------------字符串---------------------# readonly URL="定义一个常量:www.baidu.com" your_name="jack" echo $your_name echo ${your_name} for file in `ls ~/Desktop`; do echo "${file}" done echo $URL your_name1='单引号字符串内部不能有变量,只能固定输出' your_name2="单引号字符串可以有变量${URL},和转义符\"Hi,转义\"" echo $your_name1 echo $your_name2 echo "字符串长度:${#your_name}" echo "子字符串,从1下标开始读3个字符:${your_name:1:3}" echo `gexpr index "$your_name1" 固定` #语法错误 echo "使用#号可以截取指定字符(或者子字符串)右边的所有字符, *表示跨过左侧任意个字符:${your_name1#*固定}" echo "使用%号可以截取指定字符(或者子字符串)左边的所有字符, *表示跨过右侧任意个字符:${your_name1%固定*}" # ----------------------数组---------------------# cities=("北京" "上海" "深圳" "杭州") echo ${cities[1]} echo ${cities[@]} #@:获取数组中所有的元素 echo ${!cities[@]} #![@]:获取数组中所有的元素的key键,数组可以放[key:value]对 echo "数组的长度:${#cities[@]}" :<<EOF 多行注释: 定义一个函数EOF,但是没有地方调用,达到注释的效果 EOF # ----------------------传递参数---------------------# :<<EOF $0: 执行文件名 $1: 第一个参数 $2: 第一个参数 . . EOF echo "执行文件的名称为:$0,传参个数为:$#, 参数值为:$1,$2" # ----------------------运算符执行---------------------# #纯命令用``或$()执行 `xcodebuild -list -project aaa.xcodeproj` #带参数用$()执行 $(ls $name) # ----------------------循环遍历---------------------# sortSchemeNames=(aaa bbb ccc) projInfo=`xcodebuild -list -project aa.xcodeproj` #目标字符串projInfo中,#*中间间隔任意个字符串直到查到“Schemes:”字符串,返回其右侧的部分 tragetSchemes=${projInfo#*Schemes:} for ((i=0; i<${#schemeNames[@]}; i++)); do scheme=schemeNames[i] # 父字符串$tragetSchemes 是否包含子字符串$scheme ? if [[ $tragetSchemes =~ $scheme ]] then echo "------------第${i}个库构建开始:${scheme}" echo "++++++++++++第${i}个库构建结束:${scheme} \n" fi done for scheme in ${sortSchemeNames[@]}; do if [[ $tragetSchemes =~ $scheme ]] then echo "----------> build 开始:${scheme}" echo "<---------- build 结束:${scheme} \n" fi done # ----------------------路径截取---------------------# :<<EOF 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 引用地址:http://www.jb51.net/article/94355.htm EOF # ----------------------xcodebuild构建实例---------------------# # 产物默认目录下~/Library/Developer/Xcode/DerivedData/* # -destination generic/platform=iOS \ # -destination generic/platform=iphonesimulator\ plateformDevice='generic/platform=iOS' plateformSim='generic/platform=iphonesimulator' # 1.获取工程下所有的schemes, 遍历构建所有子项目 # 假设脚本在工程的父级目录 projectName="aa.xcodeproj" projectPath=$(find . -name $projectName) projectPath=${projectPath%/*} cd $projectPath projInfo=$(xcodebuild -list -project $projectName) targetSchemes=${projInfo#*Schemes:} for ((i=0; i<${#sortSchemeNames[@]}; i++)); do scheme=${sortSchemeNames[i]} if [[ $targetSchemes =~ $scheme ]] then echo "------------构建开始:${scheme}" xcodebuild \ -destination ${plateformDevice} \ -workspace ${param1}.xcworkspace \ -scheme ${scheme} \ -configuration 'Debug' echo "++++++++++++构建结束:${scheme} \n" fi done # 2.真机,模拟器分别归档,并打.xcframework包 # 假设脚本在工程的当前目录 # 执行shell命令,查询当前目录下所有的*.xcodeproj文件 projPaths=$(find . -name *.xcodeproj) projPath0=${projPaths[0]} # 获取第0个路径 projName=${projPath0##*/} # 获取xxx.xcproj工程名 onlyName=${projName%.*} # 获取纯净的xxx工程名 xcodebuild archive \ -scheme ${onlyName} \ -sdk iphonesimulator \ -archivePath "archives/ios_sim.xcarchive" \ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ SKIP_INSTALL=NO xcodebuild archive \ -scheme ${onlyName} \ -sdk iphoneos \ -archivePath "archives/ios_device.xcarchive" \ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ SKIP_INSTALL=NO xcodebuild -create-xcframework \ -framework archives/ios_device.xcarchive/Products/Library/Frameworks/${onlyName}.framework \ -framework archives/ios_sim.xcarchive/Products/Library/Frameworks/${onlyName}.framework \ -output build/${onlyName}.xcframework