一、Shell基础概念
1.概念
终端——获取用户输入、展示运算结果的硬件设备。
终端模拟器——Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件。
tty——teletypeWriter的简称,和终端等价,早期指电传印机,在linux中是输入/输出环境。
Shell——command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端。
Bash——shell的一种具体实现。
2.发展
- Ken Thompson《来自贝尔实验室)在1971年为UNIX开发了第一个shell,称为V6 shell。
- Stephen Bourne在贝尔实验室为V7 UNIX所开发的Bourne shell,即sh。
- 开源组织GNU为了取代Bourne shell开发的Bourne-Again shell,即Bash。
3.构成
Shell
- 解释器
bash内置命今
GNU核心工具集
第三方库
- 编程语言
变量
运算
语句
函数
二、语法和命令
1.变量
类型 作用域 声明方式 规范
自定义变量 当前shell = 字符串、整型、浮点型、日期型
环境变量 当前shell及其子shell export、declare -x
系统环境变量 所有shell 启动加载
2.自定义变量
declare [+/-] 选项 变量
选项 含义
- 给变量设定类型属性
+ 取消变量的类型属性
-a 将变量声明为数组类型
-i 将变量声明为整数型
-x 将变量声明为环境变量
-r 将变量声明为只读变量
-p 显示指定变量的被声明的类型
3.系统环境变量
变量名 含义 常见操作
$o 当前shell名称/脚本名称 $1、$2等可以获取到传入参数
$# 传入脚本的参数数量 if[$#-gt 1 ]
$* 传入脚本的所有参数
$? 上条命令执行的状态码 if[$? -eq o ];
$PS1 命令提示符 export PS1="\u@\h\w> "
$HOME 用户主文件夹 cd ~
$PATH 全局命令的搜索路径 PATH=$PATH:[新增路径]
4.运算符与引用
类型 符号 作用 用法
算数运算符 + 一 * / % │ & 常规运算
逻辑运算符 || && !
比较运算符 == != < >
双引号"" 部分引用,仅仅$ ` \ 保留作用 foo="${a}123"
引号 单引号‘’ 完全引用,原样输出 foo=‘foo$a'
反引号`` 执行命令 foo=`ls -a`
(()) 算数运算 foo=$((1+2))
圆括号 () 执行命令 $(ls -a)
|| cmd1 执行完且返回码非0,则继续执行cmd2 cmd1 || cmd2
命令连接 && cmd1执行完且返回码为0 ,则继续执行cmd2 cmd1 && cmd2
; cmd1、cmd2串行执行 cmd1 ; cmd2
后台运行 & 让命令在后台运行,可与nohup一起使用 cmd &
5.管道
- 管道与管道符|,作用是将前一个命令的结果传递给后面的命令
- 语法: cmd1 | cmd2
- 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理
- 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipefail 设置shell遇到管道错误退出
6.重定向
输出重定向符号—— >:覆盖写入文件 >>:追加写入文件 2>:错误输出写入文件 &>: 正确和错误输出统一写入到文件中 输入重定向符号—— < <<
7.常用命令
命令 使用
grep 查找错误日志:grep -n "ERROR"-A3 -B3 cloudfun.log
统计次数:grep -n "ERROR" -c cloudfun.log
sort 指定分隔符后以第三列进行排序:sort -t " " -k 3
wc 统计出现的行数、单词数、字符数: wc -lwm
head 查看前十行: head -n 10 cloudfun.log
tail 等待追加内容: tail -f -n 10 cloudfun.log
cut 对数据行的内容进行处理cut -d " " -f 3
find 文件和目录查找
xargs 参数处理
which 查找命令路径
收获: 通过对本次课程的学习,我了解到了Linux服务器的基本操作和管理、初步学习了前端Node.js 服务的进程管理、问题排查、资源监控等运维操作;初步学会使用shell 编写TCE、SCM、Docker脚本,完成服务编译和部署。