Shell常用命令與指令碼例項
阿新 • 來源:網路 • 發佈:2023-02-22
#!/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
