Shell腳本實練

目錄

  • 根據一張圖片生成不同大小像素圖片
  • 批量修改圖片格式
  • 查找項目中未使用的圖片
  • shell腳本打包ipa

1墓猎、根據一張圖片生成不同大小像素圖片

步驟:
1、cd到需要含有圖片(如:icon.png)的文件夾
2酌住、創(chuàng)建.sh文件(如:test.sh)
3泪掀、執(zhí)行.sh文件,執(zhí)行命令sh test.sh icon.png
其中.sh命令代碼如下:

    filename=$1  #$1就是參數icon.png
    dirname="compressImage"
    #圖片名稱數組
    filename_array=("Icon-1.png" "Icon-2.png" "Icon-60.png" "Icon-60@2x.png" "Icon-72.png" "Icon-72@2x.png" "Icon-76.png" "Icon-76@2x.png" "Icon-ad32.png" "Icon-ad48.png" "Icon-ad72.png" "Icon-ad96.png" "Icon-ad144.png" "Icon-Small-1.png" "Icon-Small.png" "Icon-Small@2x-1.png" "Icon-Small@2x.png" "Icon-Spotlight-iOS7-1.png" "Icon-Spotlight-iOS7.png" "Icon-Spotlight-iOS7@2x-1.png" "Icon-Spotlight-iOS7@2x.png" "Icon-Spotlight.png" "Icon-Spotlight@2x.png" "Icon.png" "Icon@2x.png")
    #圖片大小數組
    size_array=("58" "58" "60" "120" "72" "144" "76" "152" "32" "48" "72" "96" "144" "29" "29" "58" "58" "40" "40" "80" "80" "50" "100" "57" "114")
    mkdir $dirname
    for ((i=0;i<${#size_array[@]};++i)); do
        m_dir=$dirname/${filename_array[i]}  #路徑:image/
        cp $filename $m_dir   #將icon.png,拷貝到image文件夾下
        sips -Z ${size_array[i]} $m_dir   #將上一步拷貝的icon圖片進行壓縮
    done

sips -Z舉例講解:

sips -z 300 ~/Desktop/test.png

以上命令將桌面上的test.png圖片改成寬度為300像素失暴,高度自適應大小的圖片
也可以指定寬高壓縮:

sips -z 300 600 ~/Desktop/test.png

sips還有其他功能:

#水平翻轉圖片
sips -f horizontal  ~/Desktop/test.png
#垂直翻轉
sips -f vertical  ~/Desktop/test.png
#順時針旋轉90°
sips -r 90 ~/Desktop/test.png
#獲取圖片寬高
sips -g pixelWidth -g pixelHeight ~/Desktop/test.png

2、批量修改圖片格式

其實還是用的sips功能
格式:

sips -s format [格式名稱] [文件名] --out [輸出文件的名稱]

通過上面這個命令微饥,如果我們想將test.jpg轉換成為PNG格式

sips -s format png test.jpg --out test.png

上面的命令適合轉換單個圖片文件逗扒,要想批量轉換圖片文件,我們需要使用下面命令格式:

for i in [文件名]; do sips -s format [格式名稱] $i --out [終點]/$i.[格式名稱];done

示例:將當前目錄下所有jpg圖片轉化為png欠橘,存放在新建的文件夾下

dirName="rotateImage"
mkdir $dirName
for i in *.jpg; do sips -s format png $i --out $dirName/$i.png;done

3矩肩、查找項目中未使用的圖片

步驟:
1、查找工程中所有圖片肃续,最后生成一個數組黍檩,數組元素為圖片名稱
2、遍歷數組始锚,查看每張圖片在項目中是否使用
3刽酱、對步驟2結果判斷,使用則不處理疼蛾,未使用則可選擇性刪除
命令代碼:

#! /bin/bash

#查找工程中所有圖片
searchImageResult=`find . -name *.png -o -name *.jpg`
for i in $searchImageResult
do
    #獲取圖片名稱
    imageName=`basename -s .jpg "$i" | xargs basename -s .png`
    echo $imageName
    #查看是否使用圖片肛跌,忽略sh文件,檢查.m文件
    ack --noshell --cpp -l $imageName
    result=$?
    if [ $result == 0 ]; then
        echo "工程有使用圖片$imageName"
    else
        echo "工程沒有使用圖片$imageName"
        #可以選擇是否刪除
        # rm "$i"
    fi
done

使用:將.sh文件(如:test.sh)拷貝目錄下察郁,執(zhí)行sh test.sh

4衍慎、shell腳本打包ipa

先看下代碼:

#! bin/bash
#為了簡化,默認工程的workspace皮钠、project稳捆、target名字相同

projectPath=`pwd` # 工程路徑
buildConfig="Debug" #編譯的方式,有Release,Debug,自定義的AdHoc等
isWorkSpace=true  #如果項目中使用了cocoapods麦轰,請改為true乔夯,否則改為false
projectName=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'` #工程名
IPADir=~/Desktop/${projectName}_IPA #ipa文件路徑,可以修改
buildAppToDir=$projectPath/build #打包產生的文件夾(存在.app)
rm -rf $projectPath/build
if $isWorkSpace ; then  #判斷編譯方式
    echo  "開始編譯workspace......................"
    xcodebuild  -workspace $projectName.xcworkspace -scheme $projectName  -configuration $buildConfig clean build SYMROOT=$buildAppToDir
else
    echo  "開始編譯target.........................."
    xcodebuild  -target  $projectName  -configuration $buildConfig clean build SYMROOT=$buildAppToDir
fi
#判斷結果
if test $? -eq 0
then
    echo "~~~~~~~~~~~~~~~~~~~編譯成功~~~~~~~~~~~~~~~~~~~"
else
    echo "~~~~~~~~~~~~~~~~~~~編譯失敗~~~~~~~~~~~~~~~~~~~"
    exit 1
fi
#查找.app路徑款侵,最后在build/Debug-iphoneos
findFolderName=`find . -name "$buildConfig-*" -type d |xargs basename` #查找目錄
appDir=$buildAppToDir/$findFolderName/  #app所在路徑
#開始打包
xcrun -sdk iphoneos -v PackageApplication $appDir/$projectName.app  -o $projectPath/$projectName.ipa
#判斷是否打包成功
if [ -f ${projectPath}/${projectName}.ipa ]
then
    echo "打包成功."
else
    echo "打包失敗."
    exit 1
fi
# 將打包好的ipa拷貝到目標路徑
if [ -d $IPADir ]
then
    echo "ipa路徑已存在"
else
    echo "創(chuàng)建ipa路徑文件夾"
    mkdir -pv $IPADir
fi

ipaPath=$IPADir/$projectName$(date +%Y%m%d-%H:%M:%S).ipa
cp ${projectPath}/${projectName}.ipa $ipaPath
rm -rf ./build
rm ${projectPath}/${projectName}.ipa

將包含以上代碼的.sh 文件放置工程根目錄末荐,執(zhí)行,運行完成桌面會多一個文件夾新锈,內部就是打包好的ipa文件
以上會出現警告(無傷大雅):

warning: PackageApplication is deprecated, use `xcodebuild -exportArchive` instead.

意思是PackageApplication打包方式過去甲脏,使用xcodebuild -exportArchive命令,以上主要代碼部分不再闡述,下面是可以改的地方:

#!/bin/bash
projectPath=`pwd`
workspace=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`
schemeName=workspace
buildConfig="Debug"
xcodebuild archive -workspace $workspace -scheme $schemeName -sdk iphoneos -configuration $buildConfig  ONLY_ACTIVE_ARCH=NO -archivePath ./build/$schemeName.xcarchive

xcodebuild -exportArchive -archivePath ./build/$schemeName.xcarchive -exportPath $projectPath

xcodebuildxcrun都是來自Command Line Tools块请,Xcode自帶娜氏,如果沒有可以通過以下命令安裝:

xcode-select --install

手動安裝
安裝完可在以下路徑看到這兩個工具:

/Applications/Xcode.app/Contents/Developer/usr/bin/

xcodebuild主要是用來編譯,打包成Archive和導出ipa包,指令
可以執(zhí)行 xcodebuild -help 查看
xcrun:打包工具

最后

shell系列文章:
shell腳本學習(一)
shell腳本學習(二)
shell腳本學習(三)
shell腳本學習(四)

shell腳本內容學習的東西比較少墩新,需要學習的還是一些unix的命令贸弥,所以平時多掌握一些命令才好
另外文中使用到的unix關鍵字awk、grep海渊、find绵疲、basename、Xargs臣疑、ack等我已做了學習筆記最岗,需要的可以艾特我,由于是筆記就不發(fā)布了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末朝捆,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子懒豹,更是在濱河造成了極大的恐慌芙盘,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脸秽,死亡現場離奇詭異儒老,居然都是意外死亡,警方通過查閱死者的電腦和手機记餐,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門驮樊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人片酝,你說我怎么就攤上這事囚衔。” “怎么了雕沿?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵练湿,是天一觀的道長。 經常有香客問我审轮,道長肥哎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任疾渣,我火速辦了婚禮篡诽,結果婚禮上,老公的妹妹穿的比我還像新娘榴捡。我一直安慰自己杈女,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碧信,像睡著了一般赊琳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砰碴,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天躏筏,我揣著相機與錄音,去河邊找鬼呈枉。 笑死趁尼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的猖辫。 我是一名探鬼主播酥泞,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啃憎!你這毒婦竟也來了芝囤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辛萍,失蹤者是張志新(化名)和其女友劉穎悯姊,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體贩毕,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡悯许,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了辉阶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片先壕。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谆甜,靈堂內的尸體忽然破棺而出垃僚,到底是詐尸還是另有隱情,我是刑警寧澤店印,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布冈在,位于F島的核電站,受9級特大地震影響按摘,放射性物質發(fā)生泄漏包券。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一炫贤、第九天 我趴在偏房一處隱蔽的房頂上張望溅固。 院中可真熱鬧,春花似錦兰珍、人聲如沸侍郭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亮元。三九已至猛计,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爆捞,已是汗流浹背奉瘤。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煮甥,地道東北人盗温。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像成肘,于是被迫代替她去往敵國和親卖局。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容