学习shell的价值
·Linux服务器的基本操作和管理
·前端Node.js服务的进程管理、问题排查、资源监控等运维操作
·使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
1shell基础概念
概念
命令行解释器,处理来自终端模拟器的输入,解释执行结果之后输出结果给终端
发展
构成
解释器、编程语言
2命令和语法
变量
父子shell
自定义变量
declare命令基本选项
- 给变量设定类型属性
- 取消变量的类型属性
-a 将变量声明为数组类型
-i 将变量声明为整数型
-x 将变量声明为环境变量
-r 将变量声明为只读变量
-p 显示指定变量的被声明类型
系统环境变量
配置文件加载
·登录式 login shell
·非登录式 non-login shell
交互式、非交互式(sh 执行test.sh脚本)
使用source执行脚本
运算符和引用
nohup node sever.js &clear 后台关闭仍然运行
管道
管道与管道符丨,作用是将前一个命令的结果传递给后面的命令
语法:cmd1丨cmd2
要求:管道右侧的命令必须能接受标准输入,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理
注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set-o pipefail设置shell遇到管道错误退出
重定向
输入重定向和输出重定向
判断命令
test、[、[[三种判断符号,可用于:整数、字符串和文件测试
注意:
(1)中括号前后要有空格符
(2)[和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串
(3)中括号内的变量,最好都是用引号括起来
(4)[[更丰富,在整型比较中支持<、>、=,在字符串比较中支持=~正则
分支语句
语法1
语法2
循环
·while循环
while condition ; do 程序段; done
·until循环 until condition ; do 程序段; done
条件成立时跳出循环
·for循环 for var in[words...]; do 程序段; done
函数
(1)语法1: funcName(){ echo "abc";}
(2)语法2 function funName(){ echo "abc";}
注意
模块化
模块化的原理实在当前shell内执行函数文件,方式:
source [函数库的路径]
常用命令
3执行过程和原理
执行
1、shell脚本一般以.sh结尾,也可以没有;第一行需要指定用什么命令解释器来执行
2、启动方式
执行过程
shell展开
(1)大括号展开
(2)波浪号展开
(3)参数展开
(4)命令替换
(5)数学计算
(6)文件名展开