shell是一个命令解释器,用来向内核发送请求。
通过写shell脚本,通过shell执行。(bashshell)

脚本格式

#!/bin/bash开头
脚本要有执行权限。
或者使用sh来执行脚本,他可以不需要执行权限。
sh hello.sh

定义变量

A=100
调用该变量时需要使用$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
A=100
echo A=$A
echo "A=$A"
#这两个的输出结果是一样的。都是A=100
#只有$A才会被解析
#撤销变量
unset A
#声明静态变量
#只会定义一次,不会被反复初始化。而且不能被unset
readonly B=2
#在shell中,等号两侧不允许又空格
## 将命令的返回值返回出去
A=`data` or A=$(data)
#其中data是命令。

定义全局变量

export。可以在/etc/profile中写入。然后通过source命令刷新。也可以部分权限。写入bashrc中也可以
所谓全局变量,就是指变量在当前的整个 Shell 进程中都有效。每个 Shell 进程都有自己的作用域,彼此之间互不影响。在 Shell 中定义的变量,默认就是全局变量。

需要强调的是,全局变量的作用范围是当前的 Shell 进程,而不是当前的 Shell 脚本文件,它们是不同的概念。打开一个 Shell 窗口就创建了一个 Shell 进程,打开多个 Shell 窗口就创建了多个 Shell 进程,每个 Shell 进程都是独立的,拥有不同的进程 ID。
在一个 Shell 进程中可以使用 source 命令执行多个 Shell 脚本文件,此时全局变量在这些脚本文件中都有效。

注释

1
2
3
4
5
#单行注释使用`#`
多行注释使用
:<<!
其中是被注释的内容。
!

位置参数变量

执行shell脚本时,直接后置参数传入。
比如:./myshell.sh 100 200
这就是一个执行shell的命令行。

  1. $n表示第几个参数,10以上的参数需要用${10}之类
  2. $*表示所有的参数
  3. $@表示所有的参数。
  4. $#表示参数的个数

## 预定义变量
$$当前进程的PID
$!后台运行最后一个进程的pid