面向 iOS 开发的 Bash 脚本教程

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

Bash(或叫 shell)脚本是 Unix 和类 Unix 操作系统的一种常用脚本,提供了一种强大的方法来自动执行重复性任务,如果能好好加以利用可以为我们开发人员节省大量时间。

作为 iOS 开发人员,使用 Bash 脚本可以帮助执行各种重复性的任务,例如自动化构建过程、管理文件系统、运行测试或部署应用等等。

今天就来介绍一下。

编写和运行第一个 Bash 脚本

每个 Bash 脚本文件都以 #!/bin/bash 开头的。这主要是告诉计算机使用哪种类型的代码解释器。

我们新建一个名为 test.sh 的文件,用文本编辑器打开,输入以下代码:

bash 复制代码
#!/bin/bash
echo "Hello world!"

要运行这个脚本文件,只需要在终端中输入这个文件的路径:

bash 复制代码
/你的路径/test.sh

首次运行你可能会看到一个报错:

javascript 复制代码
zsh: permission denied: /你的路径/test.sh

这是因为它没有权限执行,先运行命令:

bash 复制代码
chmod +x /你的路径/test.sh

然后再次运行这个脚本,就会看到终端中打印出了 Hello world!,这样,你的第一个 Bash 脚本就完成了。

基本语法

我们学习任何一种语言都要先学习其基本语法,下面是一些常用的 Bash 基础语法和示例:

  1. 解释器指令

前面也介绍过了,Bash 脚本通常以 #!/bin/bash 开始,表示使用 Bash 解释器来执行脚本。

  1. 注释:使用 # 开头的行表示注释,用于解释代码的作用和用途,不会被执行。
bash 复制代码
#!/bin/bash
# 这是一个示例的 Bash 脚本
echo "Hello, World!" # 打印 Hello, World!
  1. 变量:使用变量来存储和引用数据。变量名不需要声明,直接赋值即可。
bash 复制代码
#!/bin/bash
name="John"
echo "My name is $name." # 打印 My name is John.
  1. 输入输出:使用 echo 命令输出文本,使用 read 命令从用户处获取输入。
bash 复制代码
#!/bin/bash
echo "请输入你的名字?"
read name
echo "你好, $name!"

这段代码会先输出 请输入你的名字?,然后等待用户输入内容,输入完成后打印 你好, {输入的内容}!

  1. 条件语句:使用条件语句来进行条件判断和分支执行。
bash 复制代码
#!/bin/bash
echo "输入一个数字:"
read num

if [ $num -gt 10 ]; then
    echo "输入的数字大于 10."
else
    echo "输入的数字不大于 10."
fi

这里的 -gt 是一个表达式,用来判断输入的数字是否大于 10,除了 -gt,Bash 还提供了其他一些常用的比较运算符:

  • -eq:等于(equal)

  • -ne:不等于(not equal)

  • -lt:小于(less than)

  • -le:小于等于(less than or equal)

  • -gt:大于(greater than)

  • -ge:大于等于(greater than or equal)

  1. 循环:使用循环结构来重复执行一段代码。
  • for 循环:用于遍历列表或范围。
bash 复制代码
#!/bin/bash
for i in 1 2 3 4 5
do
    echo $i
done
  • while 循环:在给定条件为 true 时重复执行代码块。
bash 复制代码
#!/bin/bash
i=1
while [ $i -le 5 ]
do
    echo $i
    ((i++))
done

函数语法

函数是一种可重复使用的代码块,用于执行特定任务。其实只要学会了上边的基本语法,你就可以自己写一些简单的脚本了,但是要想用好 Bash,还是要学函数。

  1. 定义函数:使用 function 关键字或直接使用函数名来定义函数都可以。函数体要由 {} 包围。
bash 复制代码
#!/bin/bash

# 使用 function 关键字定义函数
function greet {
    echo "Hello, World!"
}

# 直接使用函数名定义函数
bye() {
    echo "Goodbye!"
}
  1. 调用函数:使用函数名后跟一对 () 来调用函数。
bash 复制代码
#!/bin/bash

greet  # 调用 greet 函数
bye    # 调用 bye 函数
  1. 函数参数:函数可以接受参数,参数通过 $1$2$3 等方式引用。
bash 复制代码
#!/bin/bash

# 定义带参数的函数
greet() {
    echo "Hello, $1!"
}

# 调用 greet 函数,并传递参数
greet "Alice"  # 输出 Hello, Alice!
greet "Bob"    # 输出 Hello, Bob!
  1. 返回值:函数可以使用 return 语句返回一个值。返回值通过 $? 来获取。
bash 复制代码
#!/bin/bash

# 定义带返回值的函数
add() {
    result=$(( $1 + $2 ))
    return $result
}

# 调用 add 函数,并获取返回值
add 5 3
echo "结果为 $?"  # 输出 结果为 8

脚本参数

在 Bash 脚本中,可以通过执行脚本时提供输入参数,以便脚本可以根据这些参数进行操作。

  1. 位置参数:位置参数是指在命令行上传递给脚本的参数。它们通过 $1$2$3 等方式引用,其中 $1 表示第一个位置参数,$2 表示第二个位置参数,以此类推。
bash 复制代码
#!/bin/bash

# 获取位置参数并打印
echo "第一个参数为: $0"
echo "第二个参数为: $1"
echo "第三个参数为: $2"

执行脚本时,可以通过空格分隔的方式传递位置参数,第一个参数 $0 默认为脚本路径:

复制代码
./Test.sh 参数2 参数3 

终端将会输出:

makefile 复制代码
第一个参数为: ./Test.sh
第二个参数为: 参数2
第三个参数为: 参数3
  1. 特殊参数:Bash 还提供了一些特殊的变量来引用脚本的参数。
  • $#:表示传递给脚本的参数个数。

  • $*:表示所有位置参数的列表。

  • $@:表示所有位置参数的列表,每个参数都被引用为一个独立的字符串。

  • $?:表示上一个命令的退出状态。

bash 复制代码
#!/bin/bash

# 获取参数个数和参数列表
echo "参数个数: $#"
echo "参数分别为: $*"

# 遍历并打印参数
for arg in "$@"; do
    echo $arg
done

echo "上一个命令的退出状态: $?"
  1. 默认值:可以使用 ${变量:-默认值} 的形式,为脚本参数设置默认值。如果变量没有被设置或为空,则使用默认值。
bash 复制代码
#!/bin/bash

# 使用默认值打印参数
name=${1:-"World"}
echo "Hello, $name!"

如果没有传递位置参数,则使用默认值 "World"。

php 复制代码
$ bash script.sh
Hello, World!

写一个 iOS 开发相关的脚本

最后我们利用上边学到的知识,写一个 iOS 项目自动打包的脚本:

bash 复制代码
#!/bin/bash

# 定义变量
workspace="YourApp.xcworkspace"
scheme="YourScheme"
archivePath="YourArchivePath.xcarchive"
exportOptionsPlist="YourExportOptionsPlist.plist"
exportPath="YourExportPath"

# 定义函数
installDependencies() {
  echo "开始安装 pod 依赖..."
  pod install
  echo "pod 依赖安装完成🍺"
}

buildIPA() {
  echo "开始打包 IPA..."
  xcodebuild archive -workspace $workspace -scheme $scheme -archivePath $archivePath
  xcodebuild -exportArchive -archivePath $archivePath -exportOptionsPlist $exportOptionsPlist -exportPath $exportPath
  echo "IPA 打包完成🍺🍺"
}

openFolder() {
  echo "打开 IPA 文件夹..."
  open $exportPath
}

# 调用函数
installDependencies
buildIPA
openFolder

echo "脚本执行完成."

在这个脚本中,我们先是安装 pod 依赖,然后开始打包 ipa,打包完成之后打开 ipa 所在的文件夹。

学会了 Bash 脚本,你就可以用它来做很多重复性的事情,从而节省你宝贵的时间了。

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
恋猫de小郭10 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
万少14 小时前
第五款 HarmonyOS 上架作品 奇趣故事匣 来了
前端·harmonyos·客户端
点金石游戏出海16 小时前
每周资讯 | Krafton斥资750亿日元收购日本动画公司ADK;《崩坏:星穹铁道》新版本首日登顶iOS畅销榜
游戏·ios·业界资讯·apple·崩坏星穹铁道
旷世奇才李先生17 小时前
Swift 安装使用教程
开发语言·ios·swift
90后的晨仔18 小时前
Xcode16报错: SDK does not contain 'libarclite' at the path '/Applicati
ios
finger2448018 小时前
谈一谈iOS线程管理
ios·objective-c
Digitally19 小时前
如何将大型视频文件从 iPhone 传输到 PC
ios·iphone
梅名智19 小时前
IOS 蓝牙连接
macos·ios·cocoa
美狐美颜sdk1 天前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
恋猫de小郭1 天前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin