学习Shell的价值
- Linux服务器的基本操作和管理
- 前端Node.js服务的进程管理,问题排查,资源监控等运维操作
- 使用shell脚本编写TCE,SCM,Docker脚本,完成服务编译和部署
配置文件的加载
运算符和运用
重定向
判断命令
- shell中提供了test,单框号和双括号三种判断符号,可用于:整数测试,字符串测试,文件测试.]
- 语法 : test condition [condition] [[condition]]
-
整数测试
- test n2
- test n2
- test n2
-
字符串测试
- test -Z $str_a
- test -n $str_a
- test -str_a = $str_b
-
文件测试
- test -e /dmt && echo "exist"
- test -f /user/bin/npm && echo "file exist"
分支语句
if-elif-else=fi case $变量 in: esac
循环语句
while 循环 while condition: do 程序段:done until循环 until condition; do 程序段:done for循环 for var in [words...]; do 程序段:done
函数
1.funcName(){} 2.function funcName() {}
函数注意点
- shell 自上而下执行,函数必须在使用前定义
- 函数获取变量和shell,script类似,1,$2...获取
- 函数内return仅仅表示函数的执行状态,不代表函数执行结果
- 返回结果一般使用echo,printf,在外面使用$(),``获取结果
- 如果没有return,函数状态是上一条命令的执行状态,存储在$?中
常用的命令
执行
shell脚本一般以.sh结尾,也可以没有,这是一个约定
执行过程
- 字符解析
- 识别换行符,分号,做行的分割
- 识别命令连接符做的命令的分割
- 识别空格,tab符,做命令和参数的分割
- shell展开,
- 重定向
- 执行命令
- 收集状态并返回
shell展开
- 大括号的展开
-
字符串序列
- a{b,c,d}e => abe ace ade
-
表达式序列
- {1..5} => 1 2 3 4 5
- {1..5..2} => 1 3 5
- {a..e} => a b c d e
- 波浪号的展开
-
当前用户主目录
- => $HOME
- /foo => $HOME/foo
-
指定用户的主目录
- fred/foo => 用户fred的$HOME/foo
-
当前工作目录
- +/foo => $PWD/foo
- #上一个工作目录
- -/foo => OLDPWD-'-=')/foo
- 参数展开
- str = abcdefg
- sp1 = ${str##*d}
- sp2 =${str%%d*}
- echo $sp1 #输出 efq
- echo $sp2 #输出 abc
- 命令替换
- echo $(whoimi)
- foo(){ echo "asdasd"}
- a =
foo
- 数学计算
- 文件名展开
调试
- 普通log 使用echo
- 使用set命令
- vscode debug插件