shell编程,其实就是把之前在终端中输入的命令,写在脚本文件中。当然,脚本文件中可以写分支、循环等操作。
基本
shebang
在我们编写shell脚本上,需要新建一个以.sh结尾的文件,文件的第一行如下:
#! /bin/bash
这行就叫做shebang。其作用是告诉编译器使用哪个解析器来解释。
shell脚本的执行
可以新建个shell脚本,在里面写几个常用的命令,如下:
#! /bin/bash
cd ~
ls
那怎么执行这个脚本呢,可以修改文件的权限,使之编程可执行文件,然后直接执行即可。
./test.sh
还有另一种方式,如下
source test.sh
或者
. test.sh
两种方式有什么区别呢?source和.是shell的内建命令,内建命令在shell中执行的时候,是不是fork出子进程的,因此第二种方式运行,是在shell所在的进程运行的。而第一种方式是shell进程fork一个子进程,之后脚本在子进程汇中执行。
变量
- 环境变量 shell中可以直接使用环境变量,例如:
echo $PATH
- 自定义变量 shell中定义变量如下
test="abc"
注意,等号两边是没有空格的。如果有空格,shell就会认为后面是前面命令的参数了。shell中的变量的类型都是String类型。
文件名通配符
shell会对文件名解释通配符,主要有三种,shell会展开文件名,如下:
* 0个或多个字符
? 1个字符
[] 范围
示例:
#会列出test0,test1之类的文件
ls test*
#会列出testa testb文件
ls test[ab]
命令代换
$() 括号中可以使用命令 例如:
#date命令的执行结果赋值给datetime
datetime=$(date)
算术代换
$[]方括号中可以进行算术运算,加减乘除。例如
num=1
count=$[$num+1]
转义字符
\作为shell中的转义字符
单引号 双引号
单引号和双引号都表示字符串,其区别是,单引号中的内容会保持原样,字面值 双引号中可以使用变量
"$num"