bash的基础特性

本文详细介绍了bash的基础特性,包括引用、命令行展开、命令执行状态、多命令执行、命令补全、路径补全、命令hash缓存表、命令别名、命令历史、文件名通配符以及变量和bash快捷键的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bash的基础特性

  • 引用
  • 多命令执行:
  • 命令行展开:~ {}
  • 命令的执行状态结果
  • 多命令执行
  • 命令补全:$PATH
  • 路径补全:TAB
  • 命令hash缓存表
  • 命令别名:alias, unalias
  • 命令历史:history
  • 文件名通配符:glob
  • 变量
  • bash快捷键

引用

强引用:单引号,变量引用不执行替换;
~]# echo '$SHELL'
弱引用:双引号,变量引用会被替换;
~]# echo "$SHELL"
命令引用:反向单引号,会将引号内的字符当做命令或变量执行
~]# echo `$SHELL`

这里写图片描述

命令行展开:~, {}

~:自动展开为用户的家目录,或指定的用户的家目录;  
    例如:cd ~
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
    例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b

这里写图片描述

命令的执行状态结果

bash通过状态返回值来输出此结果:$?
    成功:0
    失败:1-255

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

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

引用命令的执行结果

多命令执行

~]# COMMAND1; COMMAND2; COMMAND3; ...

逻辑运算:
    运算数:真(true, yes, on, 1)
           假(false, no, off, 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
短路法则:
    将两个命令的执行状态结果来做判断是否执行
    ~]# COMMAND1 && COMMAND2
        COMMAND1为“假”,则COMMAND2不会再执行;
        否则,COMMAND1为“真”,则COMMAND2必须执行;

    ~]# COMMAND1 || COMMAND2
        COMMAND1为“真”,则COMMAND2不会再执行;
        否则,COMMAND1为“假”,则COMMAND2必须执行;

    示例:~]# id $username || useradd $username

这里写图片描述

命令补全:$PATH

shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令;
    命令查找机制:
        查找内部命令;
        根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;

    给定的头个字符串如果能惟一标识某命令程序文件,则直接补全;
    不能惟一标识某命令程序文件,再击tab键一次,会给出列表;

路径补全:TAB

在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件:
    tab:
        如果能惟一标识,则直接补全;
        否则,再一次tab,给出列表;

命令hash缓存表

系统初始hash表为空,当外部命令执行时,默认会从PATH 路径下寻找该命令,
找到后会将这 条命令的 路径记录到hash表中,当再次使用该命令时,
shell 解释器首先会查看hash表,存在将执行之,
如果不存在,将会去PATH 路径下寻找。
利用hash 缓存表可大大提高命令的调用速度
  • hash 常见用法
hash 显示 hash 缓存
hash –l 显示 hash 缓存,可作为输入使用
hash –p path name 将命令全路径path起别名为name
hash –t name 打印缓存中name 的路径
hash –d name 清除name 缓存
hash –r 清除缓存

命令别名:alias, unalias

alias name=‘value#定义命令别名
例如: alias cdnet='cd /etc/sysconfig/network-scripts'

获取当前shell进程的所有可用别名:
    ~]# alias
定义别名:
    ~]# alias cdnet='cd /etc/sysconfig/network-scripts'
    注意:仅对当前shell进程有效
撤销别名:
    ~]# unalias NAME

如果别名和原命令同名,想执行原命令,可以使用:
    \command        # 反斜杠
    'command'       # 反向单引号

在命令行定义的别名,仅在当前shell进程有效
如果想永久有效,需要定义在配置文件中
仅对当前用户有效: ~/.bashrc
对所有用户有效: /etc/bashrc

编辑配置给出的新配置不会立即生效
需要bash 进程重新读取配置文件
source /path/to/config_file
. /path/to/config_file

这里写图片描述

命令历史:history

显示shell进程会其会话中保存此前用户提交执行过的命令

    -c: 清空命令历史;
    -d offset:删除指定命令历史
    -r: 从文件读取命令历史至历史列表中;
    -w:把历史列表中的命令追加至历史文件中;
history #:显示最近的#条命令;

调用命令历史列表中的命令:
    !#:再一次执行历史列表中的第#条命令;
    !!:再一次执行上一条命令;
    !STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;

定制history的功能,可通过环境变量实现:
    HISTSIZE :命令历史记录的条数
    HISTFILE :指定历史文件,默认为~/.bash_history
    HISTFILESIZE :命令历史文件记录历史的条数
    HISTTIMEFORMAT=“%F %T “ 显示时间
    HISTIGNORE=“str1:str2*:… “ 忽略str1 命令,str2 开头的历史
    .bash_history:命令记录保存文件

控制命令历史记录的方式:
    环境变量:HISTCONTROL
        ignoredups:忽略重复的命令;
        ignorespace:忽略以空白字符开头的命令;
        ignoreboth:以上两者同时生效;
        erasedups:删除 重复命令
    例如:export HISTCONTROL="ignoreboth"

环境变量存放在 /etc/profile 或 ~/.bash_profile

调用上一条命令的最后一个参数:
    快捷键:ESC, .
    字符串:!$
利用上一个命令的第n个参数做命令:
    字符串:!:n : 

文件名通配符:glob

用来快速查找文件或目录

匹配模式:元字符
    *:匹配任意长度的任意字符
        pa*, *pa*, *pa, *p*a*
            pa, paa, passwd
    ?:匹配任意单个字符
        pa?, ??pa, p?a, p?a?
            pa, paa, passwd
    []:匹配指定范围内的任意单个字符
        有几种特殊格式:
            [a-z], [A-Z], [0-9], [a-z0-9]
            [[:upper:]]:所有大写字母
            [[:lower:]]:所有小写字母
            [[:alpha:]]:所有字母
            [[:digit:]]:所有数字
            [[:alnum:]]:所有的字母和数字
            [[:space:]]:所有空白字符
            [[:punct:]]:所有标点符号

            pa[0-9][0-9], 2[0-9][0-9]
    [^]:匹配指定范围外的任意单个字符
        [^[:upper:]]
        [^0-9]
        [^[:alnum:]]

变量

程序:指令+数据
        指令:由程序文件提供;
        数据:IO设备、文件、管道、变量

程序:算法+数据结构
    算法:设计解决问题的路径
变量:指向的内存空间的别名

变量赋值:name=value
变量类型:存储格式、表示数据范围、参与的运算
    编程语言:
        强类型变量:
            变量的类型的固定的 
        弱类型变量:
            bash把所有变量统统视作字符型;不支持浮点类型,除非借助工具
            bash中的变量无需事先声明;相当于,把声明和赋值过程同时实现;
                声明:类型,变量名
变量替换:把变量名出现的位置替换为其所指向的内存空间中数据;变量引用
变量引用:${var_name}, $var_name  
变量名:变量名只能包含数字、字母和下划线,而且不能以数字开头;
    变量名:见名知义,命名机制遵循某种法则;不能够使用程序的保留字,例如if, else, then, while等等;

bash变量类型:
    本地变量:作用域仅为当前shell进程;
    环境变量:作用域为当前shell进程及其子进程;
    局部变量:作用域仅为某代码片断(函数上下文);

位置参数变量:当执行脚本的shell进程传递的参数;
特殊变量:shell内置的有特殊功用的变量;
    $?:查看命令的执行状态结果
        0:成功
        1-255:失败

本地变量:作用域仅为当前shell进程;
    变量赋值:name=value
    变量引用:${name}, $name
        "":变量名会替换为其值;
        '':变量名不会替换为其值;
    查看变量:set
    撤销变量:unset name
        注意:此处非变量引用;

环境变量:作用域为当前shell进程及其子进程;
    变量赋值:
        (1) export name=value   导出一个变量,子shell可用
        (2) name=value
            export name
        (3) declare -x name=value  可导出,可指定变量类型
        (4) name=value
            declare -x name
    变量引用:${name}, $name
        例如:animal=tigger
              echo "There are some ${animal}s"

    注意:bash内嵌了许多环境变量(通常为全大写字符),用于定义bash的工作环境
        PATH, HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL, SHELL, HOME, UID, PWD, OLDPWD

    查看环境变量:export, declare -x, printenv, env
    撤销环境变量:unset name

只读变量:
    (1) declare -r name
    (2) readonly name

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

bash快捷键:

Ctrl + l 清屏,相当于clear 命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Alt + f 光标向右移动一个单词尾
Alt + b 光标向左移动一个单词首
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值