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常用命令与脚本实例的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维必须要学的Shell脚本之——管道命令(sort/tr/cut等)

Shell脚本之——条件语句if详解

Shell编程Shell基本概述与脚本执行方式

Shell编程Shell基本概述与脚本执行方式

第十一章 Shell常用命令与工具

Shell 脚本常用命令