shell 学习笔记 I:基础语法

shell 和 shell 脚本的概念

shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。由于习惯的原因,简洁起见,本文出现的“shell 编程”都是指 shell 脚本编程,不是指开发 shell 自身(如 Windows Explorer 扩展开发)。

脚本解释器

通常是指 Bash,二进制文件路径是/bin/bash。有时候你也会见到sh,在 linux 中/bin/sh 是指向 /bin/bash 的符号链接:

1
2
3
4
[root@centosraw ~]# ls -l /bin/*sh
-rwxr-xr-x. 1 root root 903272 Feb 22 05:09 /bin/bash
-rwxr-xr-x. 1 root root 106216 Oct 17 2012 /bin/dash
lrwxrwxrwx. 1 root root 4 Mar 22 10:22 /bin/sh -> bash

第一个 shell 脚本

文件拓展名通常为 sh,但拓展名不影响脚本的执行,约定俗成罢了。
第一行代码一般是这样子:

1
#!/bin/bash

意思是告诉系统使用哪个解释器运行这个脚本。

个人对 shell 的理解:将达到目的所用命令按照顺序,放在一个文件中,使用的时候只需执行文件即可,无需重复键入。

运行

运行 shell 脚本有两种方法:

作为可执行程序

1
2
chmod +x test.sh
./test.sh

首先要给这个文件加入可执行权限,然后通过./ 的方式执行这个程序。

作为解释器的参数

1
/bin/sh ./test.sh

由于 /bin 目录在 PATH 环境环境变量里,所以可以直接使用 sh:

1
sh ./test.sh

这种方式由于直接指定了解释器,所以无需在文件第一行加入#!/bin/bash

变量

定义变量

定义变量时,前面不加美元符号($),如:

1
log_dir="/var/log"

ps:等号两边不能出现空格。

除了显示的赋值,还可以用 for 语句赋值,例如:

1
for file in `ls /etc`

ps:这里的 ls /etc 是被反单引号 (`) 包裹,意思是返回执行后的结果。

使用变量

使用变量时,前面需要加美元符号($),如:

1
2
3
log_dir="/var/log"
echo $log_dir
echo ${log_dir}

echo 的作用相当于 c 语言中的 print,花括号用于限定变量名的界限,拼接字符串的时候可能需要花括号。

注释

以“#”开头的行就是注释,会被解释器忽略。
sh 里没有多行注释,只能每一行加一个 #号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#--------------------------------------------
# 这是一个自动打 ipa 的脚本,基于 webfrogs 的 ipa-build 书写:https://github.com/webfrogs/xcode_shell/blob/master/ipa-build

# 功能:自动为 etao ios app 打包,产出物为 14 个渠道的 ipa 包
# 特色:全自动打包,不需要输入任何参数
#--------------------------------------------

##### 用户配置区 开始 #####
#
#
# 项目根目录,推荐将此脚本放在项目的根目录,这里就不用改了
# 应用名,确保和 Xcode 里 Product 下的 target_name.app 名字一致
#
##### 用户配置区 结束 #####

未完待续。。。





root@kali ~# cat 重要声明
本博客所有原创文章,作者皆保留权利。转载必须包含本声明,保持文本完整,并以超链接形式注明出处【Techliu】。查看和编写文章评论都需翻墙,为了更方便地获取文章信息,可订阅RSS,如果您还没有一款喜爱的阅读器,不妨试试Inoreader.
root@kali ~# Thankyou!