shell编程

462 阅读1分钟

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"

语法

条件测试