Shell的价值
- Linux 服务器的基本操作和管理
- 前端Node.js服务的进程管理、问题排查、资源监控等运维操作
- 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
Shell基础概念
- 终端和tty概念等价(获取用户输入、展示运算结果的硬件设备)
- 终端模拟器(Mac Terminal等,关联虚拟tty的输入输出软件)
- Shell (处理来自终端模拟器的输入,解释执行之后输出结果给终端)
- Bash (shell的一种具体体现)
构成:
语法和命令
- 注意变量的作用范围
自定义
变量:
系统环境变量
配置文件加载
- 两种Shell登录式和非登陆式
-
- 登录式是指在首次登录主机时,输入用户名、密码时候
- 非登录式分为交互式(和用户有直接的交互)和非交互式(例如执行某个脚本)
- blog.csdn.net/lws123253/a…
- 如果是non-login shell直接执行的话,就没有前面的两个过程,直接执行
~./bashrc
- 如果修改了配置文件的话,需要执行
source ~/.bashrc
让其生效
运算符与引用
- 最后一行的执行
nohup node server.js &
管道
- xargs作用是把标准输入转换为参数列表的形式
- 对于stderr会予以忽略的意思是,对于管道中发生的错误不会予以输出或予以报错
重定向
ls -l >> list.txt 2>&1
"ls -l >> list.txt 2>&1"的意思是将当前目录下的文件列表以详细信息的方式列出,并将结果追加到list.txt文件的末尾。如果执行该命令时出现了错误信息,这些错误信息也会被输出到list.txt文件中。
案例:
- while循环的条件是从每一行读取信息,再将标准输入采用重定向
- echo是对每一行的信息做一个cut操作,cut完之后取第一列输入到auth文件中
- 上面的代码用到了循环的语法,如果看不懂可以先看下面的循环部分
输入EOF的时候,将已经输入的4行传给wc,wc再统计出4
判断命令
- 整数测试
-
- -eq判断是否相等
- -lt判断是否小于
- -gt是否大于
- 字符串测试
-
- -z是否为空
- -n是否非空
- =判断是否相等
- 文件测试
-
- -e 判断文件是否存在
- -f 判断文件是否存在,且为普通文件
- 在[]中可以用-o -e表示与或连接,或者是把两个条件分开用||
分支语句
循环
- until循环中是当条件成立的时候跳出循环
until循环的例子:
for循环的例子:
函数:
- 多看例子和注意中的内容
- 在函数中定义变量,会使用local限制在当前作用域下生效,避免污染全局,如果不用local的话,可以使用unset 撤销变量
unset word
函数接收返回值的例子:
模块化
常用命令
执行过程和原理
执行
shell脚本一般以.sh结尾,也可以没有,这是一个约定,第一行需要指定用什么命令解释器来执行
#! /bin/bash
#! /user/bin/env bash
启动方式:
# 文件名运行
./filename.sh
# 解释器运行
bash ./filename.sh
# source 运行
source ./filename.sh
执行过程
shell展开
大括号展开:
波浪号展开
参数展开
- 间接参数扩展
- 参数长度
- 空参数处理
- 参数切片
- 第三行的##表示最大程度的从前面截取,第七行的%%表示最大程度的从后面开始截取,*代表任意字符一直到d都进行截取
命令替换
数学计算
文件名展开
调试
前端集成
- 暂时没做太多的笔记,目前阶段还用不上,等以后需要用了再补吧(todo)