Shell编程 | 青训营笔记

32 阅读3分钟

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展开

大括号展开:

波浪号展开

参数展开

  1. 间接参数扩展

  1. 参数长度

  1. 空参数处理

  1. 参数切片

  • 第三行的##表示最大程度的从前面截取,第七行的%%表示最大程度的从后面开始截取,*代表任意字符一直到d都进行截取

命令替换

数学计算

文件名展开

调试

前端集成

  • 暂时没做太多的笔记,目前阶段还用不上,等以后需要用了再补吧(todo)