1、Shell环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ......
这里我使用的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh ,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
2、脚本执行
作为可执行程序,执行脚本命令示例:./test.sh

注意:一定要写成 ./test.sh,而不是 test.sh,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
作为解释器参数运行,执行脚本命令示例:/bin/sh test.sh

3、Shell参数传递
使用n获取脚本被传入的参数。注意0代表文件名,其他的就是1、2以此类推。使用示例如下:

结果:

还有一些特殊字符用来处理参数
|------|-----------------------------------|
| 参数处理 | 说明 |
| # | 传入的参数个数 |
| * | 拼成单个字符串输出所有参数,如果有双引号",会把双引号一起输出 |
| $$ | 脚本运行的当前进程ID号 |
| ! | 用户自己启动的最后一个后台进程的进程ID号,后台自带的看不见 |
| @ | 与\*的功能类似,区别在于如果有"会把所有参数逐个输出,不再拼接 |
| - | 显示shell当前打开的所有选项 |
| $? | 表示上一条命令的执行结果,为0执行成功,非0表示执行出错 |
示例(这里主要测试\*和@的区别)
代码如下:

结果如下:

4、Sell注释
单行注释:#即可
多行注释(暂时只记一种):
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
这个EOF可以被任意其他字符串替代(哪怕直接写注释二字都行)