当前位置: 首页 > news >正文

Shell知识点(一)

1.echo 命令

        echo命令的作用是在屏幕输入一行文本,可以降该命令的参数原样输出。

       

$ echo hello world
hello world

        如果想要输出的是多行文本,包含换行符,这时就需要把多行文本放在引号里面

$ echo "<HTML><HEAD><TITLE>Page Title</TITLE></HEAD><BODY>Page body.</BODY>
</HTML>"

 1.1 -n 参数

默认情况下,echo输出的文本抹灰会有一个回车符。 -n参数可以取消末尾的回车符,是的下一个提示符跟在输出内容的后面

1.2 -e 参数

-e 参数会解释引号(双引号和单引号)里面的特殊字符(比如换行符\n)如果不使用-e参数,即默认情况下,引号会让特殊字符变成普通字符,echo不解释他们,原样输出

$ echo "Hello\nWorld"
Hello\nWorld# 双引号的情况
$ echo -e "Hello\nWorld"
Hello
World# 单引号的情况
$ echo -e 'Hello\nWorld'
Hello
World

2.命令格式

$ command [ arg1 ... [ argN ]]

上面代码中command是具体的命令或者一个可执行文件,arg1 是传递给命令的参数,他们是可选的

例如  ls -l  ls是命令 -l是参数

有些参数是命令的配置项,这些配置项一般都是一个连词线开头,比如上面的-l 同一个配置项往往有长和短两种形式,比如 -l 是短形式 --list是长形式, 它们的作用完全相同。短形式便于手动输入,长形式一般用在脚本之中,可读性更好,利于解释自身的含义。

Bash单个命令一般都是一行,用户回车就会执行,有些命令比较长,携程多行会有利于阅读和编写,这是可以在每一行的结尾加上反斜杠,Bash就会将他们一起编译。

3.空格

以空格区分不通的参数

4.分号

分号是命令的结束符,是的一行可以防止多个命令,上一个命令执行结束后,再执行第二个

5.命令的组合符号 && ||

可以更好的控制多个命令之间的继发关系

commond1 || commond2  如果commond1执行失败那么执行commond2

commond2 && commond2 如果commond1执行成功那么执行common2

6.type命令

判断一个命令是内部命令还是外部命令

type 命令也是内置命令

7.快捷键

ctrl+L:清除屏幕并将当前行移到页面顶部

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

Shift+PageUp 向上滚动

Shift+PageDown:向下滚动

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

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

Ctrl+w:删除光标位置前一个单词

Ctrl+d 关闭Shell会话

↑ ↓ 浏览已经执行命令的历史记录

Bash的模式扩展

Shell接收到用户输入的命令以后,会根据空格将用户的输入,拆分成一个个词元,然后,Shell会扩展词元里面的特殊字符,扩展完成后才会调用相应的命令。

一共八个扩展

  • 波浪线扩展
  • ? 字符扩展
  • * 字符扩展
  • 方括号扩展
  • 大括号扩展
  • 变量扩展
  • 子命令扩展
  • 算术扩展

Bash是先进行扩展,再执行命令。因此扩展的结果是由Bash负责的,与所要执行的命令无关,命令本事并不存在参数扩展,收到什么参数就鸳鸯执行,这一点无比需要记住。

模块扩展额英文单词是iglobbing,保存扩展的模板,后来Bash内置了这个功能,但是这个二名字就保留了下来。

Bash 允许用户关闭扩展。

$ set -o noglob
# 或者
$ set -f

下面的命令可以重新打开扩展

 

$ set +o noglob
# 或者
$ set +f

2.波浪线扩展

会自动扩展成当前用户的主目录 

$ echo ~
/home/me

~/dir 标识扩展成主目录的某个子目录, dir是主目录里面的一个子目录名

 

# 进入 /home/me/foo 目录
$ cd ~/foo

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

$ cd ~/foo
$ echo ~+
/home/me/foo

3 ?字符扩展

?字符代表文件路径里面的任意单个字符 不包括空字符,比如Data ???匹配所有Data后面跟着三个字符的文件名 

# 存在文件 a.txt 和 b.txt
$ ls ?.txt
a.txt b.txt

上面命令中,?表示单个字符,所以会同时匹配a.txtb.txt

如果匹配多个字符,就需要多个?连用。

# 存在文件 a.txt、b.txt 和 ab.txt
$ ls ??.txt
ab.txt

 4.*字符扩展

*字符代表文件路径里面的任意数量的任意字符,包括零个字符。

# 存在文件 a.txt、b.txt 和 ab.txt
$ ls *.txt
a.txt b.txt ab.txt

注意,*不会匹配隐藏文件(以.开头的文件),即ls *不会输出隐藏文件。

如果要匹配隐藏文件,需要写成.*

 如果要匹配隐藏文件,同时要排除...这两个特殊的隐藏文件,可以与方括号扩展结合使用,写成.[!.]*

5.方括号扩展

方括号扩展的形式是[...],只有文件确实存在的前提下才会扩展。如果文件不存在,就会原样输出。括号之中的任意一个字符。比如,[aeiou]可以匹配五个元音字母中的任意一个。

方括号扩展还有两种变体:[^...][!...]。它们表示匹配不在方括号里面的字符,这两种写法是等价的。比如,[^abc][!abc]表示匹配除了abc以外的字符。

6[start-end]扩展

方括号扩展一个简写形式[start-end],表示匹配一个连续的范围,比如。[a-c]等同于[abc],[0-9]匹配[0123456789]

  • [a-z]:所有小写字母。
  • [a-zA-Z]:所有小写字母与大写字母。
  • [a-zA-Z0-9]:所有小写字母、大写字母与数字。
  • [abc]*:所有以abc字符之一开头的文件名。
  • program.[co]:文件program.c与文件program.o
  • BACKUP.[0-9][0-9][0-9]:所有以BACKUP.开头,后面是三个数字的文件名。

这种简写形式有一个否定形式[!start-end],表示匹配不属于这个范围的字符。比如,[!a-zA-Z]表示匹配非英文字母的字符。

7.大括号扩展

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

$ echo {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

 注意 大括号内部的都好前后不能有空格,否则大括号扩展会失效。

大括号可以嵌套

8. {start..end}扩展

大括号扩展有一个简写形式{start..end},表示扩展成一个连续序列。比如,{a..z}可以扩展成26个小写英文字母。

9.变量扩展

Bash将美元符号$开头的词元视为变量,将其扩展为变量值 

$ echo $SHELL
/bin/bash

 变量名除了放在美元符号后面,也可以放在${}里面。

$ echo ${SHELL}
/bin/bash

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

$ echo ${!S*}
SECONDS SHELL SHELLOPTS SHLVL SSH_AGENT_PID SSH_AUTH_SOCK

${!S*}扩展成所有以S开头的变量名。

10.子命令扩展

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

$ echo $(date)
Tue Jan 28 00:01:13 CST 2020

11.算数扩展

 $((...))可以扩展成整数运算的结果

$ echo $((2 + 2))
4

12 字符类

 [[: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)
$ echo [[:upper:]]*

 

上面命令输出所有大写字母开头的文件名。

字符类的第一个方括号后面,可以加上感叹号!,表示否定。比如,[![:digit:]]匹配所有非数字。

$ echo [![:digit:]]*

 

上面命令输出所有不以数字开头的文件名。

字符类也属于文件名扩展,如果没有匹配的文件名,字符类就会原样输出。

# 不存在以大写字母开头的文件
$ echo [[:upper:]]*
[[:upper:]]*

使用注意

 (1)通配符是先解释,再执行。

(2)文件名扩展在不匹配时,会原样输出。

(3)只适用于单层路径。

(4)文件名可以使用通配符。

http://www.lryc.cn/news/62063.html

相关文章:

  • mysql 索引失效、联合索引失效场景和举例
  • 快速将PDF转换为图片:使用在线转换器的步骤
  • 什么是gpt一4-如何用上gpt-4
  • Docker 相关概念
  • STM32平衡小车 TB6612电机驱动学习
  • 动态加载 JS 文件
  • 14、lldb调试指令
  • 浏览器缓存策略:强缓存和协商缓存
  • 2023年Chat GPT 应用前景分析
  • 并发计算公式
  • “华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)
  • Arduino学习笔记3
  • BPMN2.0 任务-用户任务
  • David Silver Reinforcement Learning -- Markov process
  • 项目结束倒数2
  • VBA智慧办公9——图例控件教程
  • Presto VS Spark
  • 为什么我们能判断声音的远近
  • 那些关于DIP器件不得不说的坑
  • 论文笔记:基于U-Net深度学习网络的地震数据断层检测
  • kafka单节点快速搭建
  • 【MySQL】(6)常用函数
  • Linux学习 Day1
  • Hibernate中的一对多和多对多关系
  • Linux系统之部署Samba服务
  • 回顾产业互联网的发展历程,技术的支撑是必不可少的
  • 关于gas费优化问题
  • Linux——中断和时间管理(中)
  • 嵌入式软件中常见的 8 种数据结构详解
  • vue 修改当前路由参数并刷新界面