✏️
kingkong
  • Introduction
  • Go
    • 入门
    • 并发
    • 避坑
    • 测试
    • GC
    • 性能剖析PProf
    • 第三方库
    • 学习资料
    • 编写可维护Go语言代码建议
    • SOLID Go Design
    • 数组与切片
    • Go Mudules
    • mac 系统go升级 1.12到1.14
  • Kubernetes
    • 安装
    • 本质
    • 常用命令
    • 架构
    • 配置文件
    • Pod
    • Kubectl
    • 学习资料
  • Mac
    • Mac
    • Alfred4
    • 开机启动项管理
    • 升级macOS Big Sur11.1后蓝牙不能用
    • macOs磁盘清理之Homebrew数据清理
  • Docker
    • 常用命令
    • Dockerfile
    • Compose
    • Registry
    • Limit
    • Network
    • Volume
    • 特殊的进程
    • Namespace-Process
    • Namespace-Mount
    • Namespace-UTS
    • Namespace-IPC
    • Namespace-Network
    • Namespace-User
    • 踩坑
  • DevOps
    • ChatOps
    • GitOps
    • SecOps
    • VictorOps
  • Algorithm
    • raft
  • 中间件
    • etcd
    • Nacos集群部署
    • zookeeper
  • 分布式
    • CAP理论
    • BASE理论
    • Gossip协议
  • 网络
    • IP地址编址方式
    • C10k
    • NIO-BIO-AIO
    • Http
  • Linux
    • 常用命令
    • 常用命令1
    • 常用网络命令
    • 进程管理
    • 守护进程
    • Systemd
    • Unix哲学
    • 端口
    • 网络
    • CentOS目录结构
    • IT
    • 文件系统
    • 开源协定
    • 基础知识
    • bash
    • shell
    • vim
    • lvm2
    • btrfs文件系统
    • raid
    • 任务计划及周期性任务执行
    • find
    • 程序包的安装卸载
    • yum
    • sed
    • 用户、组和权限
  • 数据库
    • Redis
    • MySQL
  • 消息队列
    • kafka
  • 语言之道
  • 程序设计原则
  • LoadBalancer
    • LVS
    • HAProxy
  • 敏捷
    • 影响地图
    • 卡诺模型
    • 精益画布
    • 电梯演讲
    • INVEST原则
    • 复杂系统
    • AARRR模型
    • 用户故事
    • 看板
    • Scrum
  • MicroService
    • 分布式链接追踪系统
    • ServiceMesh
    • 如何设计微服务
    • 领域驱动设计
  • 项目实战
    • 多通道告警服务
    • IAM
  • 管理
    • 沟通
    • 演讲
    • 面试官
  • Authorization
    • JWT
  • Spring
    • IoC
    • SpringFramework
    • Spring核心编程思想
  • Java
    • SPI机制
    • Jar
    • tutorial
    • 面向对象
    • 核心类
    • 泛型
    • 集合
    • IO
    • 日期与时间
    • 单元测试
    • maven
    • 函数式编程
  • Mix
    • Bookmark
    • WorkStation
    • 快速压力转换
    • 手机拍照
    • markdown画图
    • RESTful API设计
    • 如何做单元测试
    • 赶走脂肪肝
  • Aphorism
  • 互联网
    • DNS
    • Nginx
  • Rust
  • Quarkus
    • java.util.zip.ZipException: zip END header not found
  • Python
    • tutorial
  • 区块链
    • Substrate
    • BTC
Powered by GitBook
On this page
  • bash的基础特性
  • History
  • 命令补全
  • 命令行展开
  • 命令执行的状态结果
  • 引用命令的执行结果
  • 引用
  • 快捷键
  • 变量
  • 变量命名
  • 变量类型
  • 变量作用域
  • 本地变量
  • 环境变量
  • 只读变量
  • 程序:指令+数据
  • 程序:算法+数据结构
  • set命令
  • globbing 文件名通配
  • IO重定向及管道
  • tr命令
  • 管道
  • tee命令
  • 特殊设备 /dev/null
  • 命令hash
  • bash多命令执行
  • 逻辑运算
  • 配置文件
  • profile类
  • baserc类
  • 算术运算
  • bash脚本编程之用户交互

Was this helpful?

  1. Linux

bash

bash的基础特性

命令历史:shell进程会在其会话中保存此前用户提交执行的过的命令

$ history

定制history功能,可以通过环境变量实现

  • HISTSIZE: shell进程可保留的命令的历史的条数

  • HISTFILE:持久保存命令历史的文件 ~/.bash_history

  • HISTFILESIZE:命令历史文件的大小

History

history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]

  • -c:清空历史记录

  • -d offset: 删除指定命令历史

  • -r: 从文件读取命令历史到历史列表中

  • -w: 把历史列表中的命令追加至历史文件中

  • history #: 显示最近的#条命令

调用命令历史列表中的命令

  • !#: 再一次执行历史列表中的第#条命令

  • !!: 再一次执行上一条命令

  • !STRING: 再一次执行命令历史列表中最近一个以STRING开头的命令

    • 注意:命令的重复执行有时需要依赖于幂等性

调用上一条命令的最后一个参数:

  • 快捷键:ECS+.

  • 字符串:!$

控制命令历史记录的方式 环境变量:HISTCONTROL

  • ignoredups: 忽略重复的命令

  • ignorespace: 忽略以空白字符开头的命令

  • ignoreboth: 以上两者同时生效

修改变量的值

$ NAME="VALUE"

命令补全

tab键

  • 命令补全

  • 路径补全

命令行展开

  • ~ 自动展开为用户的家目录,或指定用户的家目录

  • {} 可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径

    • /tmp/{a,b} = /tmp/a, tmp/b

命令执行的状态结果

命令执行的状态结果 bash通过状态返回值来输出此结果

  • 失败:0

  • 成功:1-255

    命令执行完成之后,其状态返回值保存于bash的特殊变理$?值里

命令正常执行时,有的还回有命令的返回值:根据命令及其功能的不同,结果各不相同

引用命令的执行结果

引用命令的执行结果:$(COMMAND) 或 COMMAND

引用

  • 强引用 ''

  • 弱引用 ""

  • 命令引用 ``

快捷键

  • CTRL+a 跳转命令行首

  • CTRL+e 跳转至命令行尾

  • CTRL+u 删除行首至光标所在处之间的所有字符

  • CTRL+k 删除行尾至光标所在处之间的所有字符

  • CTRL+l 清屏 相当于clear

变量

变量是命名的内存空间

变量命名

变量名只能包含数字字母下划线,不能以字母开头 变量名:见名知义,命名机制遵循某种法则

变量类型

  • 整型

  • 浮点型

  • 字符型

  • 布尔型

  • 日期时间型

  • 字符型

  • 数值型

    • 精确数值

    • 近似数值

变量的类型确定了存储格式,数据范围,参与运算。

  • int 8: 1000, 0000 1000

  • int 16: 10000, 0001 0000

  • string 16: 16bit

弱类型变量

bash把所有变量统统视作字符型 bash中的变量无需事先声明

变量替换:把变量名出现的位置替换为其所指向的内存空间中的数据 变量引用:${var_name} $var_name

变量作用域

  • 本地变量:作用域仅为当前shell进程

  • 环境变量 作用域仅当前shell进程及其子进程

  • 局部变量 作用域仅某段代码片段或函数上下文

位置参数变量 特殊变量:shell内置的有特殊功用的变量

本地变量

  • 变量赋值 name=value

  • 变量引用 ${name}, $name

    • "": 变量名会替换为其值

    • '': 变量名不会替换为其值

  • 查看变量 set

  • 撤销变量: unset var_name 注意此处非变量引用

环境变量

变量赋值

  • export name=value

  • name = value; export name

  • declare -x name=value

  • name=value; declare -x name

    变量引用 ${name} $name

注意 bash内嵌了许多环境变量(通常为全大与字符),用于定义bash的工作环境

查看环境变量命令:set、printenv、declare -x、env 撤销环境变量:unset name

只读变量

  • declare -r name

  • readonly name

只读变量无法重新赋值 ,并且不支持撤销; 存活时间为当前shell进程的生命周期,随shell进程终止而终止

程序:指令+数据

  • 指令 运行的程序

  • 数据 IO设备、文件、管道、变量

程序:算法+数据结构

set命令

查看定义过的变量

globbing 文件名通配

匹配模式之元字符

    • 匹配任意长度的任意字符

  • ?匹配任意单个字符

  • [] 匹配指定范围内容的任意单个字符 [a-z] [A-Z] [0-9] [a-z0-9] [abdyx]

    • [[:upper:]] 匹配大写字母

    • [[:lower:]] 匹配所有小写字母

    • [[:alpha:]] 所有字母

    • [[:digit:]] 所有数字

    • [[:alnum:]] 所有字母和数字

    • [[:space:]] 所有空白字符

    • [[:punct:]] 所有标点符号

  • 匹配指定范围外的任意字符

IO重定向及管道

程序:指令+数据 程序: IO

可用于输入的设备:文件 键盘设备,文件系统的常规文件,网卡等 可用于输出的设备 :文件 显示器,文件系统上的常规文件,网卡等

程序的数据流有三种

  • 输入的数据流: <-- 标准输入(stdin),键盘

  • 输出的数据流: --> 标准输出 (stdout) 显示器

  • 错误输出流: --> 错误输出(stderr) 显示器

fd: file descriptor, 文件描述符

  • 标准输入: 0

  • 标准输出: 1

  • 错误输出: 2

IO重定向

输出重定向: > --覆盖输出 输出重定向: >> -- 追加输出

set -C 禁止覆盖输出到已存在的文件 可以使用强制覆盖:>| set +c 关闭上述特性 仅对当前shell有效

错误输出流重定向:2> 2>>

合并正确输出流和错误输出流:

  • &>, &>>

  • COMMOND > /path/to/file 2>&1

  • COMMOND >> /path/to/file 2>&1

输入重定向: < HERE DOCUMENT: <<

cat <<EOF
> how are you?
> doing
> EOF

tr命令

tr [OPTION]... SET1 [SET2] 把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符

用法

  • tr SET1 SET2 < path/file

  • tr -d SET1 < path/file

注意不修改源文件

管道

连接程序,实现将前一个命令的输出直接定向后一个程序当作输入

COMMAD | COMMAD | COMMAD

tee命令

read from standard input and write to standard output and files 从标准输入里读取数据,写到标准输出或文件

COMMAND | tee /PATH/TO/file

特殊设备 /dev/null

数据黑洞

命令hash

Determine and remember the full pathname of each command NAME. If no arguments are given, information about remembered commands is displayed.

确定和记住每命令的完整的路径,

缓存此前的命令的查找结果:key-value

  • key 搜索键

  • value: 值

hash命令

  • hash列出

  • hash -D COMMAND 删除

  • hash -r 清空

bash多命令执行

COMMAND1;COMMAND2;COMMAND3;...

逻辑运算

运算数:

  • 真(true, yes, on, 1)

  • 假(false,no ,off, 0)

与:&& 或:|| 非:! 异域:

短路法则

$ command1 && command2 //1为假2则不会执行 1为真2必须执行
$ command1 || command2 //1为假2则执行 1为真2则不会执行

配置文件

配置文件分两类

  • profile类 为交互式登录shell提供配置

  • bashrc类 为非交互式登录的shell进程提供配置

交互式登录shell进程

直接通过某终端输入账号和密码后登录打开的shell进程 使用su命令 su - USERNAME 或者使用 su -l USERNAME执行的登录切换

非交互式登录shell进程

su USERNAME 执行的登录切换 图形界面下打开的终端 运行脚本

profile类

  • 全局:对所有用户都生效

    • /etc/profile

    • /etc/profile.d/*.sh

  • 用户个人:仅对当前用户有效

    • ~/bash_profile

功能

  • 用于定义环境变量

  • 运行命令或脚本

baserc类

  • 全局

    • /etc/bashrc

  • 用户个人

    • ~/.bashrc

功用

  • 定义本地变量

  • 定义命令别名

仅管理员可修改全局配置文件

交互式登录shell进程 /etc/profile -> etc/profile.d/* -> bash_profile -> ~/.bashrc -> /etc/bashrc

非交互式登录的shell进程 ~/.bashrc -> /etc/bashrc -> /etc/profile.d/*

命令行中定义的特性,例如变量和别名作用域为当前shell进程的生命周期; 配置文件定义的我,只能随后新启动的shell进程有效

让通过配置文件定义的文件立即生效

  • 通过命令行重复定义一次

  • 让shell进程重读配置文件

    • source /PATH/CONF

    • . /PATH/CONF

算术运算

算术运行格式 1. let var=算术运算表达式 2. var = $[算术运算表达式] 3. var = $((算术运算表达式)) 4. var = $(expr $arg1 $op $arg2)

注意:乘法符号在有些场景下需要使用转义符

  • +

  • -

  • *

  • /

bash脚本编程之用户交互

脚本参数

用户交互:通过键盘输入,赋值给变量

  • echo -n "Enter a name"; read name

  • read -p "Enter a name" name

  • read -t 5 -p "Enter a name" name #等5s

检查脚本中的语法错误 bash -n script.sh

调试执行 bash -x script.sh

Previous基础知识Nextshell

Last updated 4 years ago

Was this helpful?