實(shí)用腳本分享

實(shí)用腳本分享

最近工作需要嘿悬,寫了幾個(gè)腳本低零,介紹給需要的同學(xué)婆翔,順便說下實(shí)現(xiàn)的原理
地址:ShellSnippet

檢測(cè)iOS主題資源包圖片大小的腳本

使用步驟

該腳本用于檢測(cè)iOS的資源包大小是否符合iOS的資源大小規(guī)范,防止因?yàn)閳D標(biāo)大小的不規(guī)范導(dǎo)致在不同屏幕的機(jī)型上體驗(yàn)不一致掏婶。
使用步驟如下:
1啃奴、先把資源包解壓,資源文件會(huì)放在同一個(gè)目錄下雄妥,演示資源包存放的路徑是:
/Users/aron/GitRepos/iosdemos/YTThemeManagerDemo/Doocuments/IOS
2最蕾、然后執(zhí)行checkImage.sh腳本,如果提示沒有權(quán)限老厌,使用命令chmod u+x ./checkImages.sh給腳本添加運(yùn)行權(quán)限瘟则,會(huì)提示輸入目錄,復(fù)制粘貼第一步的目錄即可

執(zhí)行checkImage.sh


3枝秤、執(zhí)行了腳本之后會(huì)輸出一個(gè)分析結(jié)果的文件outLogFile.txt醋拧,該文件中保存了可能存在問題的資源文件列表
outLogFile.txt


比如nav_btn_share_black這個(gè)文件2x和3x的大小是一樣的,在3x的機(jī)器上顯示就會(huì)存在問題:圖標(biāo)變小或者圖標(biāo)的顯示效果變模糊淀弹,需要讓UI提供合適的圖標(biāo)丹壕。
Compare1


Compare2

實(shí)現(xiàn)分析

實(shí)現(xiàn)步驟如下,主要使用了sips命令獲取圖片的信息垦页,進(jìn)行循環(huán)比較:

  • ls ${imagesFolder}命令獲取文件夾下的所有資源文件
  • sips -g pixelWidth ${imagePath}命令獲取圖片資源的信息
  • 記錄上個(gè)圖片資源的信息雀费,然后循環(huán)比較判斷圖片尺寸是否合適

對(duì)應(yīng)的代碼如下,關(guān)鍵的地方有做了注釋了:

#/bin/sh

imagesFolder="/Users/aron/Desktop/CheckImages/IOS"
outpuLogFile="$(pwd)/outLogFile.txt"
echo "" > ${outpuLogFile}

# 輸入文件夾
echo -n "請(qǐng)輸入圖片目錄: "
read imagesFolder
if [[ -d $imagesFolder ]]; then
    echo "圖片目錄正確"
else
    echo -n "輸入的目錄無效痊焊,請(qǐng)重新執(zhí)行腳本"
fi

# 獲取下面的所有文件
lastHandleFile=""
lastHandleImageWidthHeight=""
for imageFullName in $(ls ${imagesFolder}); do
    echo "imageFullName = ${imageFullName} lastHandleFile = ${lastHandleFile}"
    // 使用sed的替換命令s盏袄,去掉圖片名稱中的 @2x.png  @3x.png 結(jié)尾,方便比較
    pureImageName=`echo ${imageFullName} | sed 's/@.*.png//g' | sed 's/\.png//g'`
    if [[ ${pureImageName} == ${lastHandleFile} ]]; then
        # 判斷大小
        imagePath="${imagesFolder}/${imageFullName}"
        // sips -g pixelWidth ${imagePath} 獲取到的結(jié)果如下:
        //  pixelHeight: 1334
        // 使用awk命令使用:分隔符分割獲取第二部分也就是圖片的寬度
        ImageWidth=`sips -g pixelWidth ${imagePath} | awk -F: '{print $2}'`
        ImageHeight=`sips -g pixelHeight ${imagePath} | awk -F: '{print $2}'`
        height=`echo $ImageHeight`
        width=`echo $ImageWidth`
        currentImageWidthHeight="${width}_${height}"
        if [[ ${currentImageWidthHeight} == ${lastHandleImageWidthHeight} ]]; then
            // 使用>>追加寫入可能不符合要求的文件名
            echo ${lastHandleFile} >> ${outpuLogFile}
        fi
    else
        lastHandleFile=${pureImageName}

        imagePath="${imagesFolder}/${imageFullName}"
        ImageWidth=`sips -g pixelWidth ${imagePath} | awk -F: '{print $2}'`
        ImageHeight=`sips -g pixelHeight ${imagePath} | awk -F: '{print $2}'`
        height=`echo $ImageHeight`
        width=`echo $ImageWidth`
        lastHandleImageWidthHeight="${width}_${height}"

        echo "pureImageName = ${pureImageName} lastHandleImageWidthHeight=${lastHandleImageWidthHeight}"
    fi
done

批量文件轉(zhuǎn)換編碼的腳本

把源文件的編碼轉(zhuǎn)換為UTF-8薄啥,默認(rèn)轉(zhuǎn)換的源代碼是php和html結(jié)尾的源碼辕羽,需要轉(zhuǎn)換其它格式的自定義即可,修改代碼中的如下行

if [[ $(expr "$item" : '.*\.php') -gt 0 ]] || [[ $(expr "$item" : '.*\.html') -gt 0 ]]; then

比如需要轉(zhuǎn)換xxx.m xxx.h xxx.mm xxx.cpp xxx.hpp文件垄惧,這一行的寫法如下

if [[ $(expr "$item" : '.*\.') -gt 0 ]] || [[ $(expr "$item" : '.*\.h') -gt 0 ]] || [[ $(expr "$item" : '.*\.cpp') -gt 0 ]] || [[ $(expr "$item" : '.*\.hpp') -gt 0 ]]; then

使用enca命令轉(zhuǎn)換刁愿,如果沒安裝,腳本會(huì)自動(dòng)使用brew安裝enca命令到逊,如果沒安裝brew铣口,emmm滤钱。。脑题。請(qǐng)自行百度安裝吧件缸。

使用步驟
1、執(zhí)行命令叔遂,提示輸入源代碼的目錄他炊,腳本會(huì)遍歷該目錄下的源文件,進(jìn)行編碼轉(zhuǎn)換已艰,結(jié)束痊末。

實(shí)現(xiàn)分下

該腳本實(shí)現(xiàn)很簡(jiǎn)單,主要是read_implement_file_recursively方法中處理遞歸遍歷哩掺,判斷文件的擴(kuò)展名是否是php/html文件凿叠,符合要求的話使用enca命令轉(zhuǎn)換格式即可,使用的一些輔助方法包括

  • 檢測(cè)命令是否安裝的方法test_command_installed疮丛,如果未安裝幔嫂,調(diào)用brew install enca進(jìn)行安裝enca
  • 檢測(cè)文件加是否存在并提示輸入的方法checkDirCorecheckInputDestDirRecursive
#!/bin/sh

# 檢測(cè)某個(gè)命令是否安裝
# @return
# 0 未安裝
# 1 安裝
function test_command_installed {
    echo "test_command_installed=="
    which_command=`which $1`
    echo $which_command
    if [[ -n  $which_command ]]; then
        echo "$1 command installed"
        return 1
    else
        echo "$1 command not installed"
        return 0
    fi
}

# 循環(huán)檢測(cè)輸入的文件夾
checkInputDestDirRecursive() {
    echo -n "請(qǐng)輸入目錄: "
    read path
    if [[ -d $path ]]; then
        CheckInputDestDirRecursiveReturnValue=$path
    else
        echo -n "輸入的目錄無效,"
        checkInputDestDirRecursive
    fi
}

# 檢測(cè)文件夾存在的方法誊薄,結(jié)果保存在全局變量`CheckInputDestDirRecursiveReturnValue`中
# 參數(shù)一:檢測(cè)的文件夾路徑
# 參數(shù)二:提示消息字符串
# 使用方式如下履恩,去掉注釋
# # 導(dǎo)入工具腳本
# . ./FileUtil.sh
# # 檢測(cè)class_search_dir
# checkDirCore $class_search_dir "指定類的查找目錄不存在"
# class_search_dir=${CheckInputDestDirRecursiveReturnValue}
class_search_dir=""
checkDirCore() {
    to_process_dir=$1
    message=$2
    # 需處理源碼目錄檢查
    if [[ -d $to_process_dir ]]; then
        echo "目錄存在 $to_process_dir"
        CheckInputDestDirRecursiveReturnValue=$to_process_dir
        return 1
    else
        echo "${message} ${to_process_dir}"
        checkInputDestDirRecursive ${to_process_dir}
    fi
}


# 遞歸函數(shù)讀取目錄下的所有.m文件
function read_implement_file_recursively {
    echo "read_implement_file_recursively"
    if [[ -d $1 ]]; then
        for item in $(ls $1); do
            itemPath="$1/${item}"
            if [[ -d $itemPath ]]; then
                # 目錄
                echo "處理目錄 ${itemPath}"
                read_implement_file_recursively $itemPath
                echo "處理目錄結(jié)束====="
            else 
                # 文件
                echo "處理文件 ${itemPath}"
                // 判斷是否是.php/.html擴(kuò)展名的文件
                if [[ $(expr "$item" : '.*\.php') -gt 0 ]] || [[ $(expr "$item" : '.*\.html') -gt 0 ]]; then
                    echo ">>>>>>>>>>>>mmmmmmm"
                    # 使用enca轉(zhuǎn)換格式
                    enca -L zh_CN -x UTF-8 ${itemPath}
                fi
                echo ""
            fi
        done
    else
        echo "err:不是一個(gè)目錄"
    fi
}

test_command_installed enca
result=$?
if [[ $result = 0 ]]; then
    echo "enca not installed now install"
    brew install enca || exit 1
fi
checkDirCore $class_search_dir "指定目錄不存在"
class_search_dir=${CheckInputDestDirRecursiveReturnValue} 
read_implement_file_recursively ${class_search_dir}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呢蔫,隨后出現(xiàn)的幾起案子切心,更是在濱河造成了極大的恐慌,老刑警劉巖片吊,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绽昏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俏脊,警方通過查閱死者的電腦和手機(jī)全谤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爷贫,“玉大人认然,你說我怎么就攤上這事÷眩” “怎么了卷员?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腾务。 經(jīng)常有香客問我毕骡,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任未巫,我火速辦了婚禮窿撬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘橱赠。我一直安慰自己尤仍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布狭姨。 她就那樣靜靜地躺著,像睡著了一般苏遥。 火紅的嫁衣襯著肌膚如雪饼拍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天田炭,我揣著相機(jī)與錄音师抄,去河邊找鬼。 笑死教硫,一個(gè)胖子當(dāng)著我的面吹牛叨吮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞬矩,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼茶鉴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了景用?” 一聲冷哼從身側(cè)響起涵叮,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伞插,沒想到半個(gè)月后割粮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媚污,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年舀瓢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耗美。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡京髓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幽歼,到底是詐尸還是另有隱情朵锣,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布甸私,位于F島的核電站诚些,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诬烹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一砸烦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绞吁,春花似錦幢痘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汰聋,卻和暖如春门粪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烹困。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工玄妈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人髓梅。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓拟蜻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親枯饿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酝锅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容