shell 脚本随处可见,甚至有些项目就是由 shell 脚本组成的
如果你想使用 shell 脚本自动化执行流程,或者看懂 shell 脚本,需要哪些知识呢
这里简单讲几个点
0 shell 适用于什么情况?
- 小工具
- 包装脚本编译代码
- 调用其他高级语言(调度)
- 少量的数据处理
1 获得参数
$ example_command 1 2 3
在执行命令后面加了三个参数
在程序中可以这样获取
# 命令本身,即: example_commandecho $0# 1echo $1# 2echo $2# 3echo $3
如果是一个 shell 函数要获取参数呢?
也是类似!
function_call () {echo $1}function_call \"call function\"
2 如何模块化
借助 source 命令
# a.shfunction function_a() {echo \'a\'
# 函数内部变量尽量使用 local 关键字,作用域能够限制在当前函数中
local b=1}# b.shsource a.shfunction_a
3 提示是否继续
while true; doread -r -p \"Step $preStep done! Next Step is $nextStep. Are You Sure Continue? [Y/N] \" inputcase $input in[yY][eE][sS] | [yY])echo \"Continue\"break;;[nN][oO] | [nN])echo \"opt exit, done.\"exit 1;;*)echo \"Invalid input...\";;esacdone
如果不想输入错误一直提示,可以去掉 while 循环
4 调试 shell 脚本
- 多加 echo ,输出有用信息
- 使用 set -x 命令
set -x 命令输出示例:
# a.shset -xa=\'aaaaaaaa\'echo $@echo \"$@\"echo $*echo \"$*\"
5 计算
有几种方式可以在 shell 中计算
但是这里只说一种
那就是双括号的形式
# a.sh# 双括号中不能使用 $n 表示变量((n = 10 / 3))echo $n
6 shell 判断
shell 的 test 提供了很多比较实用的比较方式
比如:
-e: 文件存在-f: 文件存在并且是普通文件
停,如果全列出来就没意思了,只能是授之以鱼
通过命令 man test 可以看到更详细的判断语法