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.txt
和b.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]
表示匹配除了a
、b
、c
以外的字符。
6[start-end]扩展
方括号扩展一个简写形式[start-end],表示匹配一个连续的范围,比如。[a-c]等同于[abc],[0-9]匹配[0123456789]
[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.
开头,后面是三个数字的文件名。
这种简写形式有一个否定形式[!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)文件名可以使用通配符。
Shell知识点(一)基本语法相关推荐
- 如何在 Shell 脚本中执行语法检查调试模式
我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用shell调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. ...
- 在 Shell 脚本中执行语法检查调试模式
文章目录 shell 脚本调试系列 概述 启用 verbose 调试模式 在 Shell 脚本中启用语法检查调试模式 通过修改脚本的首行来启用脚本检查 内置的 set 命令来在脚本中启用调试模式 sh ...
- linux shell 脚本编程基本语法
linux shell脚本编程基本语法 Shell script是利用shell的功能所写的一个"程序",这个程序是使用纯文本文件,将一些Linux Shell的语法与命令(含外部 ...
- Shell编程之if语法练习(LNMP)全过程
大家好,我是延凯,本人原来在CSDN写作已经快一年了 都是相关Linux运维这方面的技术知识,现在搬到博客园也是我一直想的,本博客主要写Python,docker,shell等偏向开发云计算等知识点, ...
- 生信人写程序2. Editplus添加Perl, Shell, R模板和语法高亮
https://www.editplus.com/ 前言 "工欲善其事必先利其器",生信工程师每天写代码.搭流程,而且要使用至少三门编程语言,没有个好集成开发环境(IDE,Inte ...
- Linux从入门到精通系列之SHELL编程循环语句语法及实例详解(forwhileuntil)
前言 Shell作为一种脚本编程语言,同样了包含了循环,分支等其他程序控制结构,从而能够轻松完成更加复杂.强大的功能.我们今天就来认识for.while.case语句的具体应用. 插个小广告吧,虽然我 ...
- shell中条件判断语法与判断条件小结
IF条件判断语法: if A then dosth elif B dosth else dosth fi 判断条件: 2.1 字符串判断 str1 = str2 当两个串有相同内容.长度时为真 str ...
- Shell 脚本编程 基本语法:
Shell 脚本编程语法: 注: 文章来源 http://www.cnblogs.com/yunquan/p/6821850.html 视频来源:https://www.bilibili.com/vi ...
- linux系统shell知识点,linux shell 知识点
1.if语句 语法为: if [ 条件表达式 ]; then ..... fi 条件表达式类型: 文件表达式 if [ -f file ] 如果文件存在 if [ -d ... ] 如果目录存在 if ...
最新文章
- git 比较两个版本之间的区别
- 高通驱动9008安装_高通snapdragon888的性能有多强大
- Linux 系统备份恢复工具 SYSTEM-RESCUE-CD 的使用
- php 配置远程调试,PHP Linux 环境下搭建 XDEBUG并配置远程调试
- E:K-periodic Garland(DP)
- 浅谈云计算与数据中心计算
- java 路由器接口的作用是什么_路由器的接口和用途
- 【java学习之路】(javaWeb【后端】篇)002.Servlet
- 云主服务器排行榜_国内云服务器排名
- NLP基础笔记1——中文分词技术
- C语言程序——摄氏度和华氏度之间的转换
- Android studio3.2 分配内存设置方法
- Tp5 实现 think-queue 队列操作
- Linux 内核配置项详解 myimx6
- 中国合成革行业应用发展分析与销售前景研究报告2022版
- Android-PickerView系列之介绍与使用篇(一)
- 声音的频率与主观听感
- 安装laravel/Horizon
- 建筑施工技术【21】
- 【VBA自用常用模板1】WORD/WPS办公宏/常用宏
热门文章
- 关于js中0==‘‘判断为True
- 人工智能入门书单(附PDF链接)
- Java游戏开发——开心农场
- “青软杯”安徽科技学院第六届程序设计大赛_专业组
- 51单片机与ESP8266轻松上手Onenet(二)--onenet AT指令测试
- 绝缘电阻仪测试仪与绝缘耐压测试仪的区别
- php java sha1_PHP 种的 SHA1WithRSA
- ASP.NET Core 基础(九)——路由Routing
- STM32G070芯片开发笔记:一、如何用ST送的学习板上的STLink烧录调试
- STC89C52上的读写MMA7455程序