这片文章是基于Shell脚本编程30分钟入门的入门基础,简要介绍shell的一些常用需要注意的语法基础。请务必熟悉上面所指出的文章。
1. test或[命令
在实际工作中,大多数脚本程序都会广泛使用Shell的布尔判断命令[或test。在一些系统上,这两个命令其实是一样的,只是为了增强可读性,当使用[命令时,我们还使用符号]来结尾。其中[ ] 中 左右两端需要空格。
2. 常用比较符号
| 字符串比较 | 结果 |
|---|---|
| string1 = string2 | 如果两个字符串相同,结果就为真 |
| string1 != string2 | 如果两个字符串不同,结果就为真 |
| -n string | 如果字符串不为空,则结果为真 |
| -z string | 如果字符串为一个空串(null),则结果为真 |
| 算术比较 | 结果 |
|---|---|
| expression1 -eq expression2 | 如果两个表达式相等,则结果为真 |
| expression1 -ne expression2 | 如果两个表达式不等,则结果为真 |
| expression1 -gt expression2 | 如果expression1大于expression2,则为真 |
| expression1 -ge expression2 | 如果expression1大于等于expression2,则为真 |
| expression1 -lt expression2 | 如果expression1小于expression2,则为真 |
| expression1 -le expression2 | 如果expression1小于等于expression2,则为真 |
| !expression | 表达式为假,则结果就为真;反之亦然 |
| 文件条件测试 | 结果 |
|---|---|
| -d file | 如果文件是一个目录,则为真 |
| -f file | 如果文件是一个普通文件,则为真;也可以用来测试文件是否存在 |
| -r file | 如果文件可读,则结果为真 |
| -s file | 如果文件大小不为0,则结果为真 |
| -w file | 如果文件可写,则结果为真 |
| -n file | 只读取file脚本,但不实际执行 |
| -x file | 如果脚本文件可执行,则结果为真 |
3.系统变量
| 变量名 | 含义 |
|---|---|
| $0 | 这个程序的执行名字 |
| $n | 这个程序的第n个参数值,n=1...9 |
| $* | 这个程序的所有参数 |
| $# | 这个程序的参数个数 |
| $$ | 这个程序的PID |
| $! | 执行上一个背景指令的PID |
| $? | 上一个指令的返回值 |
4.运行shell
运行shell通常有两种方法
- 1.作为可执行程序
chmod +x test.sh
./test.sh
注意,一定要写成./test.sh,而不是test.sh,运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。
通过这种方式运行bash脚本,第一行一定要写对,好让系统查找到正确的解释器。
- 2.作为解释器参数
这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:
/bin/sh test.sh