Shell命令解惑

将Flutter Module作为私有库使用的脚本如下

path="../iOS_Flutter_Framework/FlutterLibrary/Frameworks"
libPath="../iOS_Flutter_Framework"
currentDate=$(date "+%Y%m%d%H%M%S")
pre_version=${Build_pre_version}
libTag="${pre_version}.${currentDate}"
echo "$libTag"

#判断输入的Tag_Version 不为空
if [ -z $libTag ];then
    #输入的是空
    echo "\n输入格式错误,请重新运行脚本,输入正确格式的sdk tag版本号\n"
else
    #不是空
    # release的正则
    reg='^[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,14}$'

    echo "Tag_Version》》》》》》 "$libTag

    if [[ "$libTag" =~ $reg ]];then
        echo "恭喜你,输入的版本号,格式验证通过"
    else
        echo "\n输入格式错误,请重新运行脚本,输入正确格式的sdk tag版本号\n"
        exit 1
    fi
fi

rm -rf $path
mkdir $path
out=$path
outLib=$libPath
echo "准备输出所有文件到目录:$out"

echo "清除所有已编译文件"

find . -d -name build | xargs rm -rf

flutter clean

rm -rf build

flutter pub get

addFlag(){
    cat .ios/Podfile > tmp1.txt
    echo "use_frameworks!" >> tmp2.txt
    cat tmp1.txt >> tmp2.txt
    cat tmp2.txt > .ios/Podfile
    rm tmp1.txt tmp2.txt
}

echo "检查 .ios/Podfile文件状态"
a=$(cat .ios/Podfile)
if [[ $a == use* ]]; then
    echo '已经添加use_frameworks, 不再添加'
else
    echo '未添加use_frameworks,准备添加'
    addFlag
    echo "添加use_frameworks 完成"
fi

echo "编译flutter"

BuildMode=${BuildType}

if [ ${BuildMode} = "Debug" ]; then
  flutter build ios --debug --no-codesign  
else
  flutter build ios --release --no-codesign  
fi

echo "编译flutter完成"

if [ ${BuildMode} = "Debug" ]; then
 cp -r build/ios/Debug-iphoneos/*/*.framework $out
 cp -r build/ios/Debug-iphoneos/App.framework $out
 cp -r build/ios/Debug-iphoneos/Flutter.framework $out
else
  cp -r build/ios/Release-iphoneos/*/*.framework $out
  cp -r build/ios/Release-iphoneos/App.framework $out
  cp -r build/ios/Release-iphoneos/Flutter.framework $out
fi

echo "复制framework库到文件夹: $out"

cd  $outLib

sh ./auto.sh $libTag

#! /bin/sh

# 只需要修改这个内容就行,其他的内容不需要改动
git_commit_des="update framework"

echo "\n ****** begin ****** \n"

echo "\n ---- 获取podspec文件 begin ---- \n"

tag_version=$1
echo "tag_version 是 $1"

# 获取到的文件路径
file_path=""
file_name=""
# 文件后缀名
file_extension="podspec"
# 文件夹路径,pwd表示当前文件夹
directory="$(pwd)"


# 参数1: 路径;参数2: 文件后缀名
function getFileAtDirectory(){
    for element in `ls $1`
    do
        dir_or_file=$1"/"$element
        # echo "$dir_or_file"
        if [ -d $dir_or_file ]
        then
            getFileAtDirectory $dir_or_file
        else
            file_extension=${dir_or_file##*.}
            if [[ $file_extension == $2 ]]; then
                echo "$dir_or_file 是 $2 文件"
                file_path=$dir_or_file
                file_name=$element
            fi
        fi
    done
}
getFileAtDirectory $directory $file_extension

echo "\n -------------"
echo "\n file_path: ${file_path}"
echo "\n file_name: ${file_name}"
echo "\n ---- 获取podspec文件 end ---- \n"

# 定义pod文件名称
pod_file_name=${file_name}
# 查找 podspec 的版本
search_str="s.version"

# 读取podspec的版本
podspec_version=$tag_version

podspec_prev_version=""

function changeSpecVersion() {
    echo ${pod_file_name}
    while read line
    do
        zhengze="^s.version"
        if [[ "$line" =~ $zhengze ]];then
            echo "File:${line}"
            sed -i "" "s/${line}/s.version      = \"$tag_version\"/g" $file_path
        fi
    done < $file_path
#    cat  $pod_file_name
}

echo "\n ---- 读取原始podspec文件内容 start ---- \n"
#定义了要读取文件的路径
my_file="${pod_file_name}"
while read my_line
do
#输出读到的每一行的结果
# echo $my_line

    # 查找到包含的内容,正则表达式获取以 ${search_str} 开头的内容
    result=$(echo ${my_line} | grep "^${search_str}")
    if [[ "$result" != "" ]]
    then
           echo "\n ${my_line} 包含 ${search_str}"

           # 分割字符串,是变量名称,不是变量的值; 前面的空格表示分割的字符,后面的空格不可省略
        array=(${result// / })
        # 数组长度
        count=${#array[@]}
        # 获取最后一个元素内容
        version=${array[count - 1]}
        # 去掉 '
        version=${version//\'/}

        podspec_prev_version=$version
    #else
           # echo "\n ${my_line} 不包含 ${search_str}"
    fi

done < $my_file
echo "\n ---- 读取原始podspec文件内容 end ---- \n"
echo "\n podspec_prev_version: ${podspec_prev_version}"
echo "\n ---- 修改podspec文件内容 start ---- \n"
changeSpecVersion
echo "\n ---- 修改podspec文件内容 end ---- \n"

pod_spec_name=${file_name}
pod_spec_version=${podspec_version}

echo "\n****** ${pod_spec_name} ${pod_spec_version} begin ****** \n"

echo "\n ------ 执行 pod install ------ \n"

echo "cd Example"
cd Example
echo "pod install"
pod install

# 回到上级目录
echo "cd .."
cd ..

echo "\n ------ 执行 git 本地提交代码操作 ------ \n"
# git 操作
echo "git add ."
git add .
echo "git status"
git status
echo "git commit -m ${git_commit_des}"
git commit -m 'update framework'
git pull origin master
git push -u origin master

echo "\n ------ 执行 pod 本地校验 ------ \n"
# pod 本地校验
echo "pod lib lint --allow-warnings --verbose"
pod lib lint --allow-warnings --verbose


echo "\n ------ 执行 git 打标签tag,并推送到远端 ------ \n"
# git推送到远端
echo "git tag ${pod_spec_version}"
git tag ${pod_spec_version}
echo "git push origin master --tags"
git push origin master --tags


echo "\n ------ 执行 pod 远端校验 ------ \n"
# pod 远端校验
echo "pod spec lint --allow-warnings --verbose"
pod spec lint --allow-warnings --verbose

echo "\n ------ 执行 pod 发布 ------ \n"
# 发布
echo "pod repo push --allow-warnings"
#pod trunk push --allow-warnings
pod spec lint --sources="https://github.com/CocoaPods/Specs.git,http://gitlab.xxx.com/App/iOS/PrivateCocoapodsSpec" --use-libraries --allow-warnings

pod repo push PrivateCocoapodsSpec  $file_name --allow-warnings

echo "\n****** ${pod_spec_name} ${pod_spec_version} end ****** \n"

echo "****** end ******"

容易混淆巩固

#!/bin/bash
#

#1.反引号与$()用于命令替换
echo `date '--date=1 hour ago' +%Y-%m-%d-%H`
#或者
echo $(date '--date=1 hour ago' +%Y-%m-%d-%H)

#在编写Shell脚本时建议使用$(),原因主要有:
 #(1)反引号与单引号外形相似,容易混淆;
 #(2)在多层次的复合替换中,里层的反引号需要转义处理(\`) ,而$()则比较直观。例如下面的命令格式是错的:
 # (3)反引号中对于反斜杠有特殊的处理,使用反协议对Shell特殊字符进行转义时需要两个反斜杠,而$()中只需要使用一个反斜杠。
 #比如下面的脚本,需要输出$HOME,而不是环境变量HOME的内容,在反引号中需要对$符使用双反斜杠进行转义,$()中只需要使用一个反斜杠。
  
var1=`echo \$HOME`      #使用一个反斜杠无法完成对$符的转义
var2=`echo \\$HOME`
var3=$(echo \$HOME)
echo $var1
echo $var2
echo $var3

#2.1直接变量替换
A="dablelv"
echo ${A}B

#2.2特殊变量替换
file="/dir1/dir2/dir3/my.file.txt"
echo ${file:1}

variable="'(]\\{}\$\""
echo "${variable}"
echo $variable  

num=1
echo "hello world,$num"
echo 'hello world,$num'
echo hello world,$num

echo $(date) 
name="str.tar.gz"
echo ${name} 


name11='runoob'
str1="Hello, I know you are \"$name11\"!"
str2="Hello, I know you are "$name11"!"
str3='Hello, I know you are \"$name11\"!'
str4="Hello, I know you are \'$name11\'!"   
#str5='Hello, I know you are \'$name11\'!'  错误的
echo $str1
echo $str2
echo $str3
echo $str4

:<<!
'(]\{}$"
'(]\{}$"
hello world,1
hello world,$num
hello world,1
Hello, I know you are "runoob"!
Hello, I know you are runoob!
Hello, I know you are \"$name11\"!
Hello, I know you are \'runoob\'!
!

可以参考,将私有库自动化
https://github.com/casatwy/ConfigPrivatePod

Shell 手把手教你入门
链接: https://pan.baidu.com/s/17SjZYjWxpDQqMeY8wjXsOg 密码: kg4n

推荐博客:
https://github.com/dunwu/blog/blob/master/source/_posts/coding/shell.md

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,521评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,181评论 4 8
  • 步骤:发微博01-导航栏内容 -> 发微博02-自定义TextView -> 发微博03-完善TextView和...
    dibadalu阅读 3,127评论 1 3
  • 回这一趟老家,心里多了两个疙瘩。第一是堂姐现在谈了一个有妇之夫,在她的语言中感觉,她不打算跟他有太长远的计划,这让...
    安九阅读 3,498评论 2 4