Shell常用命令与脚本实例
Posted 滴水微澜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell常用命令与脚本实例相关的知识,希望对你有一定的参考价值。
#!/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
以上是关于Shell常用命令与脚本实例的主要内容,如果未能解决你的问题,请参考以下文章