bush扩展模式学习小结

Bash基本语法

命令行提示符多数以$结尾,root用户以#结尾,在指定符号后输入bash命令

打开bash命令: bash 退出 : exit

查看版本 : bash --version / echo $BASH_VERSION


echo命令 : 原样输出单行或者多行文本

echo -n : 取消输入内容末尾的回车符,也可以让2个echo命令的输出连接出现在同一行

echo -e : 使输出参数中的特殊字符可以解析成对应的内容 例如\n 解析为换行符


命令格式

相关操作命令基础格式为 命令 参数 例如: ls -a

命令+参数的组合分为短形式和长形式,作用完全一致,长形式一般用于编写系统脚本中,可读性好,利于解释自身含义

bash单个命令为一行,输入命令回车之后命令开始执行,需要输入多行命令的时候可以在命令行末尾增加 \ ,bash则会将下一行与当前行命令拼接再一起解析执行


空格

bash中使用空格区分要执行命令的不同参数,若输出内容中包含多个空格,bash会自动忽略多余的空格


分号

分号;是命令的结束符,使用;的情况下可以在一行放置多个命令,会按照顺序一一执行且前面命令执行结果不会影响;之后的命令的执行


命令组合符

&& :在一行放置一个以上的命令,但是仅在前一个命令执行成功之后,下一个命令才会被执行

|| :在一行放置一个以上的命令,但是仅在前一个命令执行失败之后,下一个命令才会被执行


type命令

type命令被用来判断其他执行命令的来源

type -t :-t参数可以返回命令的类型

类型列表:别名alias, 关键词keyword,函数function,内置命令builtin,文件file


快捷键

Ctrl+L :清除屏幕并将当前行移到页面顶部(clear也可以清除屏幕内容且当前行定位再页面顶部)

Ctrl+C :终止当前正在执行的命令

Shift+PageUp :向上滚动

Shift+PageDown :向下滚动

Ctrl+U :从光标位置删除到行首

Ctrl+K :从光标位置删除到行尾

Ctrl+D :关闭shell会话

上下箭头可以浏览已执行的命令的历史记录


bash扩展模式

shell接收到输入的命令之后,会根据空格将用户的输入内容拆分成一个个词元,然后shell将扩展词元中的特殊字符,扩展完成后再调用相关命令。扩展的结果由bash负责,与所执行的命令无关,命令本身不存在参数扩展。

模式扩展早于正则表达式的出现,功能简单方便,但是没有正则表达式灵活。

bash开启扩展 :set +o noglob / set +f

bash关闭扩展 :set -o noglob / set -f

bash扩展类型内容如下:

波浪线扩展

波浪线会自动扩展成当前用户的主目录,若~后跟有其他目录名,则会扩展成~下执行的其他目录

波浪线后跟随用户名,则会返回到指定用户的主目录,但是用户不存在的时候该扩展不生效

~+会扩展成当前所在的目录,等同于pwd命令

?字符扩展

?字符代表文件路径里面的任意单个字符,不包括空字符,

例如 test???则会匹配所有test后台跟随者3个字符的相关文件名

?.php则会匹配所有文件名为一个字符的全部php文件,如果需要匹配多个字符,则使用多个?即可

但是?扩展仅在匹配文件真实存在的前提下才会被执行,否则会将命令原样返回

*字符扩展

*字符代表文件路径中任意数量的任意字符,也包含0个字符

输出当前目录下的全部文件 : ls *

匹配全部的php文件 :*.php

匹配所有符合指定条件的文件 * t*.php(也可以包含空格)

匹配隐藏文件 :.* 直接匹配* 不会匹配到隐藏文件

匹配隐藏文件切不包含.和..这2个特殊隐藏文件 :.[!.]*

*字符属于文件名扩展,只有在匹配文件真实存在的前提下才会被执行,否则命令会原样返回

bash4.0中存在globstar参数,当该参数打开时,允许**匹配0个或者多个子目录, 如: * * / *.php可以匹配顶层的文件和任意深度子目录的文件

方括号扩展

方括号扩展的形式为[...],只有匹配文件真实存在的前提下才会被执行,文件不存在则命令原样返回

[abc]可以匹配3个字符中任意一个符合条件的文件

方括号扩展的2种变体 [ ^...] 和 [!...],表示匹配不在方括号内的字符,2种变体的写法是相等的

如果需要匹配[或者]符号,也可以将相关参数放在[]内,如需匹配连字符号-,则只能将该符号放置再方括号内部内容的开头或者是结尾

方括号扩展还存在一个简写形式,[start-end],表示匹配一个连续的范围如[0-9]则表示匹配[0123456789]

同时也存在一个否定形式[!0-3]表示匹配不在0和3范围内的文件

常用简写示例如下:

[a-z] :所有小写字母

[a-zA-Z] :所有小写字母与大写字母

[a-zA-Z0-9] :所有小写字母、大写字母与数字

[abc]* :所有以a/b/c字符之一为开头的文件名

program.[co] :文件program.c与文件program.o

BACKUP.[0-9] [0-9] [0-9] :所有以BACKUP.开头,后面是3个数字的文件名

大括号扩展

大括号扩展{...}表示分别扩展成大括号里面的所有值,各个值之间使用逗号分隔,例如{1,2,3}会被扩展成1 2 3

$ echo d{a,e,i,u,o}g
dag deg dig dug dog
​
$ echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back

大括号扩展不是文件名扩展,执行时会扩展成所有的给定值,不会判断相关文件是否存在

大括号扩展内部的逗号前后不能有空格,否则大括号扩展会失效;若逗号前面没有值,则扩展的第一项为空

大括号扩展可以多个内容嵌套执行;大括号扩展可以与其他扩展模式连用,且优先于其他模式的扩展执行

大括号扩展可以用于多字符模式

大括号扩展也存在简写形式{start..end}且支持逆序,例如:{a..z}可以扩展成26个小写英文字母,{5..1}可以扩展成5到1之间的全部数字

如果遇到无法理解的简写内容,大括号扩展则不会执行,会将内容原样返回

简写形式可以嵌套使用,形成复杂的扩展

大括号扩展可以新建一系列的目录 mkdir {2007..2009}-{01..12},也可以应用于for新欢

大括号扩展如果整数的前面有输入0,则扩展后输入的每一项内容前面都带有指定位数的0

大括号扩展的简写形式还可以使用第二个双点号用来指定扩展的步长{start..end..step},如:{0..8..2}则会输出0,2,4,6,8,每个输出的内容依次递增2

大括号扩展的多个简写形式连用,可以有循环处理的效果

$ echo {a..c}{1..3}
a1 a2 a3 b1 b2 b3 c1 c2 c3

变量扩展

bash将$开头的词元视为变量,会将其扩展成变量值,变量名除了放在$之后,也可以放在${}内

${!string*}和${!string@} 会返回所有匹配给定字符串string的变量名

子命令扩展

$(...)可以扩展成另一个命令的运行结果,该命令的所有输出都会作为返回值

子命令再反引号``之中也可以扩展成正确的运行结果

子命令扩展$(...)可以嵌套使用如 $( ls $(pwd)) 执行顺序为从内到外

算术扩展

$((...))可以扩展成内部内容整数运算的结果;例如“$((2+2))

字符类

[[:class:]]表示一个字符类,扩展成某一类特定支付中的一个,在第一个[]中加入~则表示否定[![:class:]]

字符类属于文件名扩展,没有匹配到真实存在的文件名时,字符类的内容会原样返回

常用字符格式如下:

[[:alnum:]]:匹配任意英文字母与数字 [[:alpha:]]:匹配任意英文字母 [[:blank:]]:空格和 Tab 键。 [[:cntrl:]]:ASCII 码 0-31 的不可打印字符。 [[:digit:]]:匹配任意数字 0-9。 [[:graph:]]:A-Z、a-z、0-9 和标点符号。 [[:lower:]]:匹配任意小写字母 a-z。 [[:print:]]:ASCII 码 32-127 的可打印字符。 [[:punct:]]:标点符号(除了 A-Z、a-z、0-9 的可打印字符)。 [[:space:]]:空格、Tab、LF(10)、VT(11)、FF(12)、CR(13)。 [[:upper:]]:匹配任意大写字母 A-Z。 [[:xdigit:]]:16进制字符(A-F、a-f、0-9)

使用须知:

通配符是先解释,再执行

文件名扩展不匹配是,会将内容原样返回(大括号扩展除外)

基础内容只适用于单层路径,如需匹配子目录的内容,需要根据实际需求及使用的扩展类型拼接内容后执行

文件名可以使用通配符,但是引用包含通配符的文件时,需要将文件名放在单引号或者双引号内

量词语法

量词是用来控制模式匹配的次数,只有在bash的extglob参数打开的情况下才能使用

查看extglob是否打开 : shopt extglob

开启extglob参数 :shopt -s extglob

量词语法类型如下:

?(pattern-list) :匹配零个或者一个模式

*(pattern-list) :匹配零个或者多个模式

+(pattern-list) :匹配一个或者多个模式

@(pattern-list) :只匹配一个模式

!(pattern-list) :匹配给定模式以外的任何内容

量词语法也属于文件名扩展,如果不存在可以匹配的文件时,内容会原样返回

shopt命令

shopt命令可以调整bash的行为,部分参与与通配符扩展有关

打开某个参数 :shopt -s [optionname]

关闭某个参数 :shopt -u [optionname]

查询参数启用状态 :shopt [optionname]

dotglob参数可以让扩展结果包含隐藏文件(即.开头的文件),正常情况下扩展结果不包含隐藏文件

nullglob参数可以让通配符不匹配任何文件名时返回空字符,默认情况下不匹配任何文件名时原样返回

failglob参数可以是通配符不匹配任何文件时直接终止执行,避免其他命令执行时才报错

extglob参数使bash支持ksh的扩展语法(默认打开)主要应用时支持量词语法

nocaseglob参数可以让通配符扩展不区分大小写

globstar参数可以使**匹配零个或者多个子目录(ls * * /*.php,匹配当前目录以及当前目录的子目录下的全部符合条件的文件)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值