Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell脚本是一种为Shell编写的脚本程序,一般听到的shell通常指shell脚本,但是我们要清楚shell和shell脚本是两个不同的概念,因此为了简洁起见本文出现的shell编程都是指shell脚本编程,而不是指开发shell自身
Shell脚本
Shell编程跟Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。本文基于Mac OS系统对Shell编程进行介绍,其中Mac OS不仅带了sh、bash这两个最基础的脚本解释器,还内置了ksh、csh、zsh等不常用的解释器。
编写
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就可以用php,比如在命令行输入
|
#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。
运行
运行Shell脚本有两种方法
作为可执行程序
chmod +x test.sh |
注意,一定要写成./test.sh
而不是test.sh
,因为直接执行test.sh时,Linux系统会去PATH里寻找test.sh
的,PATH包括/bin
, /sbin
,/usr/bin
,/usr/sbin
等路径,而当前目录通常不在PATH里,所以写成test.sh
时系统是找不到的。所以我们需要用./test.sh
告诉系统就在当前目录找。通过这种方式运行shell脚本,第一行一定要写对,好让shell程序查找到正确的解释器,所以使用/bin/sh
作为解释器的脚本可以省去第一行
作为解释器参数
直接运行解释器,其参数就是shell脚本的文件名,比如
/bin/sh test.sh |
这种方式运行的脚本,就不需要在第一行指定解释器信息,因为写了也没用😁
常用语法
变量
# 定义变量 |
注意,第二次赋值的时候不能写$your_name="John"
,只用使用变量的时候才加美元符😊
注释
以“#”
开头的行就是注释,会被解释器忽略,其中shell里没有多行注释,只能每一行加一个#号。
-------------------------------------------- |
如果需要达到批量注释的效果,可以将其用大括号括起来并定义成一个函数,不调用就可以起到注释的效果了
字符串
字符串是shell编程中最好用的数据类型了,字符串可以既可以用单引号,也可以用双引号,当然也可以不用引号🥳
字符串类型
# 无引号字符串 |
字符串操作
## 字符串拼接 |
条件判断
if [ `ls | grep picture` ]; then |
其中shell脚本中流程控制不能为空,而且if语句后面的方括号里是一个可执行程序,方括号中必须加空格
循环
for ((i=0; i<10; i++)); do |