欢迎大家star我的github:https://github.com/solerho/geeks-shell,建议直接使用github来查看排版,发现markdown有错位的情况。
00. 使用环境和说明centos8 Kernel 4.18.0-305.12.1.el8_4.x86_64x86_64 GNU/Linuxbash 版本:4.4.20本文不介绍和Linux 指令相关的内容先修内容:Linux基本命令(推荐书籍:《鸟哥Linux私房菜:基础学习》)只介绍本人在场景中使用后,结合参考书籍做的一个学习笔记,未使用过的暂时不更新部分图片来源书籍《高级Bash脚本编程指南》所有笔记的内容均可通过 cmd --help 查看具体的用法01. shell概述在shell中,每个脚本的开头都使用 #! ,就是告知系统文件的执行都需要指定一个解释器。指定一个文件类型的特殊标记。占用 2 字节 。
shell极脚本都是以 #!开头,告知系统该文件的执行需要一个解释器。
常见的解释器类型如下:
代码语言:txt复制<code class="txt">#!/bin/sh#!/bin/bash#!/usr/bin/perl#!/usr/bin/tcl#!/bin/sed -f#!/usr/awk -f</code>
解释说明
#!/bin/sh linux系统上默认是bash,多数UNIX商业OS中也默认shell。1.2 调用脚本执行脚本的三种方式:
代码语言:txt复制<code class="txt">#方式1sh helloworld.sh#方式2bash helloworld.shbash +x helloworld.sh</code>
第三种方式有一点特殊
代码语言:txt复制<code class="txt">./helloworld.sh #需给文件授予执行权限#实授予权限的方式如下chmod +x helloworld.sh #授予可执行权限chmod +rx helloworld.sh #授予任何人可执行可读和可执行权限chmod u+rx helloworld.sh #只给脚本的所有者可读和可执行权限</code>
<code class="txt">#!/bin/bashecho "helloworld"</code>
目前Linux/unix系统中,普遍的shell脚本的第一行是:#!/bin/sh 或者 #!/bin/bash。
在Linux中可以将两个或者多个命令连接到一起的符号(|),称为管道符。
思想:把上一个命令的输出作为下一个命令的输入(也就是因连接而形成管道(pipe)概念)。
语法格式:
代码语言:txt复制<code class="txt">command_1 | command_2 | ... | command_N# 最简单的管道cat helloworld.sh | grep hello</code>
⚠️注意:有输出才能输入,所以输出出现错误,则输入部分将无法处理。
管道的应用:在grep、tail、cat、sed、awk等Linux命令中较为常见。
特殊字符
功能
说明
注意
#
1.注释2.声明命令解释器的类型3.某些特定的模式匹配操作使用
1.注释方面:一般是行首中以 #作为开头2.声明解释器类型一般是在脚本第一行。使用格式:#!/bin/bash
命令不能和注释在同一行上,也就是注释的后面
;
命令分隔符,可以在同一行上写多个命令
某些情况需要使用转义符转义
;;
双分号,终止case选项
.
bash内置命令
1.点(.)放在文件名前面表示隐藏文件。2.移动文件操作时,如果是单独点作为参数cp cxx/helloworld.sh .表示当前工作目录3.两个点(..),表示上一级目录。4.正则表达式中作为匹配任何的单个字符
" "
双引号表示字符串
' '
单引号表示字符
,
逗号操作符
链接一系列操作
|反斜杠()|对单个字符的引用机制|一般用来转义双引号(" ") 和单引号(' ')。||
/
正斜杠(/)
1.作为文件名路径分隔符/data/cxx/Makefile2.用作除法算术操作符
*
1.乘法算术操作符2.两个(**)表示求幂运算符3.通配符,可以用来匹配给定目录下的任何文件名
?
1.测试通配符2.通配符,在正则表达式中表示一个字符,也可以用来匹配单个字符。
在表达式中测试一个条件的结果,类似C语言中的三元操作符。
$
1.引用变量2.正则表达式中,表示行结束符。
${}
参数替换
$* or $@
位置参数
$$
进程ID变量
保存所在脚本的进程ID
$?
退出状态码变量
可保存命令、函数或者脚本本身的退出状态码
一般是0或 1。
{ }
大括号,代码块,也叫作内部组。
在函数或者判断语句中使用代码块
在大括号中不允许有空白,除非空白被引用或者转义
[ ]
1.测试条件2.数组元素 3.字符范围
作为字符范围时,方括号描述一个匹配的字符范围
> &> >& >>
重定向
03. 转义符转义符是一种引用单个字符的方法。添加转义符() 使得shell中的某个字符失去原有特殊含义。
注意:在echo 和 sed 中谨慎使用转义符,否则会有相反效果。
转义符
含义
实例
表示新的一行
echo "first line";echo $'
';echo "third line"
表示回车
表示水平制表符
表示垂直制表符
表示后退符
表示"alert" (蜂鸣器或闪烁)