面向 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新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
奇客软件1 天前
如何从相机的记忆棒(存储卡)中恢复丢失照片
深度学习·数码相机·ios·智能手机·电脑·笔记本电脑·iphone
GEEKVIP1 天前
如何修复变砖的手机并恢复丢失的数据
macos·ios·智能手机·word·手机·笔记本电脑·iphone
一丝晨光1 天前
继承、Lambda、Objective-C和Swift
开发语言·macos·ios·objective-c·swift·继承·lambda
GEEKVIP2 天前
iPhone/iPad技巧:如何解锁锁定的 iPhone 或 iPad
windows·macos·ios·智能手机·笔记本电脑·iphone·ipad
KWMax2 天前
RxSwift系列(二)操作符
ios·swift·rxswift
Mamong2 天前
Swift并发笔记
开发语言·ios·swift
小溪彼岸2 天前
【iOS小组件】小组件尺寸及类型适配
swiftui·swift
GEEKVIP2 天前
手机使用指南:如何在没有备份的情况下从 Android 设备恢复已删除的联系人
android·macos·ios·智能手机·手机·笔记本电脑·iphone
奇客软件2 天前
如何使用工具删除 iPhone 上的图片背景
windows·ios·智能手机·excel·音视频·cocoa·iphone