Linux:bash基础特性【bash配置文件、条件判断,算数运算,history,alias,输入重定向】

目录

一、bash基础特性(一)【history】

​​​​​​​二、bash基础特性(二)【alias、输入重定向、bash快捷键】

​​​​​​​​​​​​​​​​​​​​​三、bash基础特性(三)【逻辑运算】

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​四、bash基础特性(四)【bash配置文件,条件判断,算术运算】


一、bash基础特性(一)【history】

  • history:记录历史命令

    • history记录的环境变量
      • $HISTSIZE:命令历史记录的条数
      • $HISTFILE:~/.bash_history【记录的命令历史文件:每个一个用户的家目录下,都有这个文件】
      • $HISTFILESIZE:命令历史文件记录历史的条数
      • -d OFFSET:删除对应的历史条数记录【例子:history -d 333】
      • -c:清楚命令历史
      • history #:显示命令中最近的#条命令
      • -a:手动追加当前会话缓冲区的命令历史至历史文件中
    • 调用历史中命令:
      • !#:重复执行第#条指令
      • !!:重复执行上一条明林
      • ! string:重复执行以string开头的最近一个指令
    • 调用上一条命令的最后一个参数
      • !$:所有终端都会适用
      • Esc  +  .:适用所用的终端
      • Alt + .:只能适用部分终端
    • 控制命令历史的记录方式
      • 环境变量:HISTCONTROL
        • ignoredups:忽略重复的命令;连续且相同方式为"重复"
        • ignorespace:忽略所有以空白开头的命令
        • ignoreboth:ignoredups、ignorespace,两种模式都生效
      • 修改环境变量方式:export 变量名="值"
      • 变量赋值:把赋值符号后面的数据存储于变量名指向的内存空间
  • 命令补全

    • bash执行命令:【Tab】键
      • 内部命令:补全命令
      • 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令命名的文件,第一次找到即为要执行的命令;
      • 直接补全:Tab,用户给的字符串只有唯一一条唯一对应的命令;
        ​​​​​​​                   以用户给定的字符串为开头对应的命令不唯一,则再次Tab会
                           给出列表
  • ​​​​​​​路径补全

    • ​​​​​​​把用户给出的字符串当作路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名
    • 如果唯一:则直接补全
    • 否则:再次Tab,给出列表
  • ​​​​​​​命令行展开

    • ​​​​​​​~:展开为用户的主目录
    • ~ UserName:展开为指定用户的主目录
    • {}:可承载一个以逗号分隔的列表,并将其展开为多个路径
      • /tmp/{a,b} = /tmp/a, /tmp/b
      • /tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi
  • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​命令行的执行结果状态

    • ​​​​​​​成功
      • ​​​​​​​$?:bash中的特殊变量$?保存最近一条命令的执行状态结果;
      • 0:代表成功
    • 失败:
      • ​​​​​​​​​​​​​​$?:bash中的特殊变量$?保存最近一条命令的执行状态结果;
      • 1-255:失败
    • ​​​​​​​程序执行结果有两类结果:
      • ​​​​​​​程序的返回值
      • 程序的执行状态​​​​​​​

​​​​​​​​​​​​​​​​​​​​​二、bash基础特性(二)【alias、输入重定向、bash快捷键】

  • 命令别名:alias
    • ​​​​​​​通过alias命令实现
      • ​​​​​​​alias:显示当前shell进程所有可用的命令别名
      • alias NAME='VALUE':定义别名NAME,其相当于执行命令VALUE;
    • ​​​​​​​注意
      • ​​​​​​​在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
      • 仅对当前用户:~/.bashrc
      • 对所有用户有效:/etc/bashrc
    • ​​​​​​​编辑配置给出的新配置不会立即生效;
      • ​​​​​​​source /path/to/config_file:重新加载命令
      • .  /path/to/config_file:重新加载命令
    • ​​​​​​​​​​​​​​取消别名:unalias
      • ​​​​​​​格式:unalias [-a] name [name ...]
      • unalias -a:取消所有别名
      • unalias lftps:取消lftps别名命令
    • ​​​​​​​注意: 如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND";
  • ​​​​​​​glob(globbing):bash中实现文件名"通配"
    • ​​​​​​​*:任意长度的任意字符
    • ?:任意单个字符
    • [ ]:匹配指定范围内的任意单个字符
      • ​​​​​​​[a-z]:不区分字符大小写
    • ​​​​​​​[^]:匹配指定范围外的任意单个字符
    • 专用字符集合:
      • ​​​​​​​[:digit:]:任意数字,相当于0-9
      • [:lower:]:任意小写字母
      • [:upper:]: 任意大写字母
      • [:alpha:]: 任意大小写字母
      • [:alnum:]:任意数字或字母
      • [:space:]:匹配空格
      • [:punct:]:标点符号
  • ​​​​​​​​​​​​​​bash快捷键
    • ​​​​​​​Ctrl+l: 清屏,相当于clear命令;
    • Ctrl+a:跳转至命令开始处;
    • Ctrl+e:跳转至命令结尾处;
    • Ctrl+c:取消命令的执行;
    •  Ctrl+u: 删除命令行首至光标所在处的所有内容;
    • Ctrl+k: 删除光标所在处至命令行尾部的所有内容;
  • ​​​​​​​bash的的I/O重定向及管道
    • ​​​​​​​程序:指令+数据读入数据:input /输入数据:output
      • 打开的文件都有一个fd:file descriptor (文件描述符)
        • ​​​​​​​系统处理数字,快于文件处理,所以使用文件描述符
      • 标准输入:keyborad, 0【0:键盘的文件描述符】
      • 标准输出:monitor, 1【1:显示器的文件描述符】
      • 标准错误输出:monitor, 2【2:标准错误描述符】
        • ​​​​​​​程序执行的结果有两种
        • 1、程序执行的结果
        • 2、程序执行的状态
    • ​​​​​​​I/O重定向:改变标准位置
      • ​​​​​​​输出正确结果重定向:COMMAND > NEW_POS, COMMAND >> NEW_POS
        • >:覆盖重定向,目标文件中的原有内容会被清除
        • >>: 追加重定向,新内容会追加至目标文件尾部
        • bash设置:终端直接输入
          • ​​​​​​​set -C: 禁止将内容覆盖输出至已有文件中【可追加】
            • ​​​​​​​强制覆盖:>|
          • ​​​​​​​set +C: 开启将内容覆盖输出至已有文件中
      • ​​​​​​​输出错误结果重定向:COMMAND 2> NEW_POS, COMMAND 2>> NEW_POS
        • ​​​​​​​2>: 覆盖重定向错误输出数据流
        • 2>>: 追加重定向错误输出数据流
      • ​​​​​​​标准输出和错误输出各自定向至不同位置
        • ​​​​​​​COMMAND > /path/to/file.out 2> /path/to/error.out
      • ​​​​​​​合并标准输出和错误输出为同一个数据流进行重定向
        • ​​​​​​​&>:覆盖重定向
        • &>>:追加重定向
        • COMMAND > /path/to/file.out 2> &1;&1到入到第一个输出流/path/to/file.out 2
          • ​​​​​​​和2为1中输入,标准错误输入,合并到标准输出,第一个数据流/file.out2 文件中去
        • COMMAND >>  /path/to/file.out 2 >> &1;&1到入到第一个输出流/path/to/file.out 2
    • ​​​​​​​​​​​​​​输入重定向:<
      • ​​​​​​​tr命令:转换或删除字符
      • 格式:tr [OPTION]... SET1 [SET2]
      • tr abc ABC:把小写的a、b、c,替换为大写A、B、C
      • tr 'a-z' 'A-Z' < /etc/fstab :把fstab文件中的小写字母,替换为大写字母
      • tr -d abc :出现a、b、c字符的都删除
    • ​​​​​​​HERE Documentation:<<【输入重定向:用于创建文档】
      • ​​​​​​​cat << EOF:输入的数据,输入到文件中
      • cat > /path/to/somefile << EOF【把EOF之前的输入重定向数据,输出到/path/somefile 文件中】
  • ​​​​​​​​​​​​​​管道:COMMAND1 | COMMAND2 | COMMAND3 |...
    • ​​​​​​​最后一个命令会在当前shell进程的子shell进程中执行
    • tee命令:从标准输入读数据,输出到文件和标准输出
      • ​​​​​​​格式:tee [OPTION]... [FILE]...
      •  用法,覆盖输出 

​​​​​​​​​​​​​​​​​​​​​三、bash基础特性(三)【逻辑运算】

  • 程序:指令+数据
    • 过程式:以指令为中心,数据服务于指令​​​​​​​
    • 对象式:以数据为中心,指令服务于数据
  • ​​​​​​​shell程序:提供了编程能力,解释执行
  • 程序的执行方式:【计算机:运行二进制指令;】
  • ​​​​​​​编程语言:
    • ​​​​​​​低级:【汇编】
    • ​​​​​​​​​​​​​​高级:【编译:高级语言-->编译器-->目标代码】【C、C++, java】
    • 解释:【高级语言-->解释器-->机器代码】【shell, perl, python】
  • ​​​​​​​过程式编程:顺序执行、循环执行、选择执行
  • shell编程:过程式、解释执行
    • ​​​​​​​编程语言的基本结构:【数据存储:变量、数组】、【表达式】、【语句】
  • ​​​​​​​shell脚本:文本文件
    • ​​​​​​​shebang:【#!/bin/bash】、【#!/usr/bin/python】、【#!/usr/bin/perl 
  • 运行脚本:
    • ​​​​​​​给予执行权限,通过具体的文件路径指定文件执行
    • 直接运行解释器,将脚本作为解释器程序的参数运行
  • ​​​​​​​变量类型【数据存储格式、存储空间大小、参与运算种类】
    • ​​​​​​​命名的内存空间
    • 数据存储方式:ASCII
      • ​​​​​​​字符:110:24【三个字节,一个字节八位】
      • 数值:110 --> 8【一个字节】【整型】【浮点型】
    • ​​​​​​​变量:
      • ​​​​​​​作用:数据存储格式
      •           参与的运算
      •           表示的数据范围
    • 编程程序语言:
      • ​​​​​​​强类型:java
        • ​​​​​​​定义变量时必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误
      • 弱类型:bash
        • ​​​​​​​无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用
    • ​​​​​​​​​​​​​​逻辑运算:
      • ​​​​​​​true【1】, false【0】
        • ​​​​​​​1 && 1 = 1
        • 1 && 0 = 0
        • 0 && 1 = 0
        • 0 && 0 = 0
      • ​​​​​​​或:
        • ​​​​​​​1 || 1 = 1
        • 1 || 0 = 1
        • 0 || 1 = 1
        • 0 || 0 = 0
      • 非:​​​​​​​
        • ​​​​​​​! 1 = 0
        • ! 0 = 1
      • ​​​​​​​短路运算:
        • ​​​​​​​与:
          • ​​​​​​​第一个为0,结果必定为0
          • 第一个为1,第二个必须要参与运算
        • ​​​​​​​​​​​​​​​​​​​​​或:
          • ​​​​​​​第一个为1,结果必定为1
          • 第一个为0,第二个必须要参与运算

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​四、bash基础特性(四)【bash配置文件,条件判断,算术运算】

  • bash中的变量的种类
    • ​​​​​​​本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
    • 环境变量:生效范围为当前shell进程及其子进程
    • 局部变量:生效范围为当前shell进程中某代码片断(通常指函数)
    • 位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数【对应调用第1、第2等参数】
      • ​​​​​​​shift [n]  :踢出参数

    • 特殊变量:$?, $0, $*, $@, $#
      • ​​​​​​​$?:上一条的命令的执行状态,0成功,非0失败
      • $0:执行的文件名
      • $*:传递给脚本的所有参数
      • $@: 传递给脚本的所有参数
      • $#: 传递给脚本的参数的个数
  • ​​​​​​​​​​​​​​本地变量:
    • ​​​​​​​变量赋值:name='value'
      • ​​​​​​​value
        • 可以是直接字串:​​​​​​​name="username"
        • 变量引用:name="$username"
        • 命令引用:name=`COMMAND`,name=$(COMMAND)
    • ​​​​​​​​​​​​​​变量引用:${name}, $name
      • ​​​​​​​" ":弱引用,其中的变量引用会被替换为变量值
      • '  ':强引用,其中的变量引用不会被替换为变量值,而保持原字符串
    • 显示已定义的所有变量:set
    • 销毁变量:unset name
  • ​​​​​​​环境变量:
    • ​​​​​​​变量声明、赋值:
      • ​​​​​​​export name=VALUE  【导出变量为环境变量】
      • declare -x name=VALUE【导出变量为环境变量】
    • ​​​​​​​显示所有环境变量:【export】、【env】、【printenv】
    • 销毁:【unset name】
    • bash有许多内建的环境变量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1
  • 变量命名法则:
    • ​​​​​​​1、不能使程序中的保留字:例如if, for
    • 2、只能使用数字、字母及下划线,且不能以数字开头
    • 3、见名知义
  • ​​​​​​​只读变量
    • ​​​​​​​readonly name
    • declare -r name  
  • bash的配置文件
    • ​​​​​​​按生效范围划分,存在两类
      • ​​​​​​​全局配置:
        • ​​​​​​​/etc/profile 【/etc/profile.d/*.sh:配置文件过大时,放在profile.d下所有以.sh的配置文件
        • /etc/bashrc
      • ​​​​​​​个人配置:
        • ​​​​​​​~/.bash_profile
        • ~/.bashrc
    • ​​​​​​​​​​​​​​按功能划分,存在两类:
      • ​​​​​​​profile类:为交互式登录的shell提供配置
        • ​​​​​​​全局:/etc/profile, /etc/profile.d/*.sh
        • 个人:~/.bash_profile
        • 功用:
          • ​​​​​​​用于定义环境变量
          • 运行命令或脚本
      • ​​​​​​​​​​​​​​bashrc类:为非交互式登录的shell提供配置
        • ​​​​​​​全局:/etc/bashrc
        • 个人:~/.bashrc
        • ​​​​​​​​​​​​​​功用:
          • ​​​​​​​定义命令别名
          • 定义本地变量
    • ​​​​​​​​​​​​​​​​​​​​​shell登录:
      • ​​​​​​​交互式登录:直接通过终端输入账号密码登录;使用“su - UserName”或“su -l UserName”切换的用户
        • /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc【加载顺序】
      • ​​​​​​​非交互式登录:
        • ​​​​​​​su UserName ;图形界面下打开的终端执行脚本;执行脚本
        • ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 【加载顺序】
    • ​​​​​​​​​​​​​​编辑配置文件定义的新配置的生效方式
      • ​​​​​​​重新启动shell进程
      • 使用source或.命令进程
  • ​​​​​​​​​​​​​​bash中的算术运算【+, -, *, /, %, **】
    • ​​​​​​​实现算术运算
      • ​​​​​​​let var=算术表达式
      • var=$[算术表达式]
      • ​​​​​​​var=$((算数表达式))
      • var=$(expr arg1 arg2 arg3 ...)
      • bash有内建的随机数生成器:$RANDOM
        ​​​​​​​
    • 增强型赋值:+=, -=, *=, /=, %=
      • ​​​​​​​let varOPERvalue
        • ​​​​​​​例如:let count+=1
      • ​​​​​​​自增:let var+=1【let var++】

      • 自减:​​​​​​​let var-=1【let var--】
  • ​​​​​​​​​​​​​​条件测试
    • ​​​​​​​判断某需求是否满足,需要由测试机制来实现
    • Note: 专用的测试表达式需要由测试命令辅助完成测试过程
    • 测试命令格式
      • ​​​​​​​test EXPRESSION
      • [ EXPRESSION ]
      • [[ EXPRESSION ]]
      • Note: EXPRESSION前后必须有空白字符
    • ​​​​​​​bash的测试类型:
      • ​​​​​​​数值测试:
        • ​​​​​​​-gt: 是否大于
        • -ge: 是否大于等于
        • -eq: 是否等于
        • -ne: 是否不等于
        • -lt: 是否小于
        • -le: 是否小于等于
      • 字符串测试
        • ​​​​​​​==:是否等于
        • >: 是否大于
        • <: 是否小于
        • !=: 是否不等于
        • =~: 左侧字符串是否能够被右侧的PATTERN所匹配
        • Note: 此表达式一般用于[[  ]]中;
          • -z "STRING":测试字符串是否为空,空则为真,不空则为假;

          • -n "STRING":测试字符串是否不空,不空则为真,空则为假
        • ​​​​​​​Note:用于字符串比较时的用到的操作数都应该使用引号
    • ​​​​​​​​​​​​​​bash自定义退出状态码
      • ​​​​​​​exit [n]:自定义退出状态码
        • ​​​​​​​注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
        • 注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值