shell基础与实战
文章平均质量分 83
shell基础与实战
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
奇妙之二进制
csdn博客专家,C/C++领域优质创作者,抖音搜奇妙之二进制,专注于Linux C/C++、嵌入式Linux开发,偶尔谈谈人生,目前致力于完成大约500篇的linux C/C++开发知识体系库,所有的文章都会一直保持更新(优化内容、排版),想学习的可以订阅我的专栏,也可以关注Linux 世界。
展开
-
shell从入门到精通(0)什么是shell
Linux中的shell,是指一个面向用户的命令接口,接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户。shell的英文含义是“壳”,它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核。Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。原创 2022-11-10 01:13:38 · 718 阅读 · 0 评论 -
shell从入门到精通(1)初次会面第一个shell脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。由于习惯的原因,简洁起见,本文出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类众多,常见的有:原创 2022-07-10 11:30:39 · 721 阅读 · 0 评论 -
shell从入门到精通(2)source命令详解以及shell几种运行方式区别
source命令也称为“点命令”,也就是可以用一个点符号(.)替代,它是bash的内部命令。功能:使Shell读入指定的Shell脚本文件并依次执行文件中的所有语句。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。用法:source filename 或 . filenamesource filename 与 sh filename 及./filename执行脚本的区别在那里呢?1.当shell脚本具有可执行权限时,用sh filename与./filename执行原创 2022-07-10 11:34:09 · 3166 阅读 · 0 评论 -
shell从入门到精通(3)shell变量一网打尽
文章目录变量定义使用变量只读变量删除变量变量类型变量定义定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:your_name="runoob.com"注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。中间不能有空格,可以使用下划线 _。不能使用标点符号。不能使用bash里的关键字(可用help命令查看保留关键字)。有效的 Shell 变量名示例如下:RU转载 2021-11-03 00:38:38 · 764 阅读 · 0 评论 -
shell从入门到精通(4)所有的流程语句
if 语句语法格式基本格式写成一行(适用于终端命令提示符):then和if可以写在同一行,但then前面要有分号。末尾的 fi 就是 if 倒过来拼写,后面还会遇到类似的。if elseif else 语法格式:if else-if elseif else-if else 语法格式:以下实例判断两个变量是否相等:实例输出结果:if else 语句经常与 test 命令结合使用,如下所示:实例输出结果:4、for 循环与其他编程语言类似,Shell支持for循环。for循环一般格式为:写原创 2022-07-10 14:56:33 · 471 阅读 · 0 评论 -
shell从入门到精通(6)关于shell数组全网最全的一篇
文章目录定义数组数组类型对某个下标赋值读取数组获取数组的长度用变量构造数组用命令构造数组获取数组最后一个成员追加元素遍历数组以空格间隔的字符串可以转为数组分片访问删除操作数组拼接Shell在编程方面比Windows批处理强大很多,无论是在循环、运算,还是数据处理方面。bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似于C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数、算术表达式、变量,其值应大于或等于0。定义数组在Shell中,用括号来表示数组,数组元原创 2022-02-23 23:31:13 · 588 阅读 · 0 评论 -
shell从入门到精通(7)关于内建命令(内置命令)和外建命令
在shell中可执行的命令分为内键命令和外部命令。在此之前,搞明白shell的内建命令和外部命令非常重要。下面将简要描述什么是内建命令和外部命令?外部命令会创建出一个包含全新环境的子进程,而内建命令不会。相比之下,外部命令的使用成本更高。内建命令因为不需要创建新的环境,所以更高效,不会受到环境变化的影响。原创 2022-10-20 11:33:39 · 563 阅读 · 0 评论 -
shell从入门到精通(8)各种引号、括号用法总结
相比 test 命令只能在比较中使用简单的算术操作,双小括号命令提供了更多的数学符号,可以在双小括号中进行各种逻辑运算、数学运算,也支持更多的运算符(如 ++、-- 等)。反引号的功能是命令替换,在反引号 ` ` 中的内容通常是命令行,程序会优先执行反引号中的内容,并使用运行结果替换掉反引号处的内容。注意:在 shell 中使用数组变量有时会引起一些问题,而且数组变量的可移植性并不好,因此在 shell 编程中,数组变量使用得并不多。$[ ] 的功能与 $(( )) 一样,都是用于算术运算。原创 2022-10-20 11:53:42 · 468 阅读 · 0 评论 -
shell从入门到精通(9)shell中 ${},${#}, ##, %%, :-,:+, ? 的使用
假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt可以用${}分别替换得到不同的值:file=/dir1/dir2/dir3/my.file.txt可以用${}分别替换得到不同的值:${file#*/} 删掉第一个/及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/} 删掉最后一个/及其左边的字符串:my.file.txt${file#*.} 删掉第一个.及其左边的字符串:file.txt${file##*.}原创 2021-08-26 11:44:06 · 5693 阅读 · 0 评论 -
shell从入门到精通(10)信号捕获和处理
Linux利用信号与运行在系统中的进程进行通信。当你在终端中启动一个前台进程,按下(Ctrl +C),Linux内核会生成SIGINT信号中断该进程。而trap命令可以在信号出现时捕获,修改信号的默认处理动作。trap命令允许你来指定shell脚本要监听并从shell中拦截的Linux信号。如果在脚本收到了trap命令中列出的信号,该信号不再由shell处理,而是交给本地处理。trap命令格式:signals-list表示要捕获的信号列表,多个信号以空格隔开,command表示收到信号后执行的命令。下面通过原创 2022-07-10 02:48:46 · 840 阅读 · 0 评论 -
shell从入门到精通(11)Shell算术运算
如果要执行算术运算(数学计算),就离不开各种运算符号,和其他编程语言类似,Shell 也有很多算术运算符,下面就给大家介绍一下常见的 Shell 算术运算符,如下表所示。换句话说,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。这是因为,在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。两边的数据(数值或者变量)当做字符串,把。转载 2022-10-20 13:34:59 · 524 阅读 · 0 评论 -
shell从入门到精通(12)函数用法以及陷阱
如果要执行算术运算(数学计算),就离不开各种运算符号,和其他编程语言类似,Shell 也有很多算术运算符,下面就给大家介绍一下常见的 Shell 算术运算符,如下表所示。换句话说,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。这是因为,在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。两边的数据(数值或者变量)当做字符串,把。原创 2022-10-20 13:55:56 · 465 阅读 · 0 评论 -
shell从入门到精通(13)输入输出重定向
类 型符 号作 用举栗标准输出重定向以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。以追加的方式,把 command 的正确输出结果输出到 file 文件中。标准错误输出重定向以覆盖的方式,把 command 的错误信息输出到 file 文件中。以追加的方式,把 command 的错误信息输出到 file 文件中。正确输出和错误信息同时保存以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。以追加。原创 2022-10-20 17:38:44 · 647 阅读 · 0 评论 -
shell从入门到精通(14) []/test命令用法
文件比较运算符[ -e filename ] 如果 filename 存在,则为真 [ -e /var/log/syslog ][ -d filename ] 如果 filename 为目录,则为真 [ -d /tmp/mydir ][ -f filename ] 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ][ -L filename ] 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ][ -r filename ] 如.原创 2021-08-26 13:55:37 · 625 阅读 · 0 评论 -
shell从入门到精通(15)双中括号[[]]用法
多数情况下[ ]和[[]]是可以通用的,单中括号 [ ],bash 的内部命令,[和test是等同的。双中括号[[ ]],[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用,语法更加接近C语言用法。如果想使 Shell if 不匹配指定的正则表达式,可以使用 Shell 的逻辑非运算符,即感叹号!,同时还要注意在感叹号前后添加空格。使用正则表达式时,需要注意的是,正则表达式不能用双引号,否则就是普通的字符串了。[]这个应该摈弃,减轻学习负担,直接使用[[]]。原创 2022-10-20 20:35:01 · 1268 阅读 · 0 评论 -
shell从入门到精通(16)shell 退出状态码(特殊变量$?)
默认状态下,shell脚本会以脚本中的最后一个命令作为退出状态码。所以一般情况下,在shell脚本中以 exit 命令的值来指定shell命令的退出状态码。但是退出状态码的范围是 0 ~ 255, 退出值超出这个范围将会执行取模运算。例如通过exit 命令指定返回值为300,经过取模运算,那么退出状态码就为44。Shell中执行的每个命令都会通过退出状态码(exit status)来返回命令的执行结果,它是0~255之间的整数值。变量用来保存上个执行的命令的退出状态码。此时你会看到的结果是 0。原创 2022-10-20 15:43:34 · 664 阅读 · 0 评论 -
shell从入门到精通(17)here document语法,多行文本插入
Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下delimiter其作用是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;最常用的delimiter是EOF。比如在终端中输入cat原创 2021-11-27 14:59:48 · 1413 阅读 · 0 评论 -
shell从入门到精通(18)read内置命令读取用户输入
ad 命令的用法为:options表示选项,如下表所示;variables表示用来存储数据的变量,可以有一个,也可以有多个。options和variables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。原创 2022-10-20 16:26:26 · 484 阅读 · 0 评论 -
shell从入门到精通(19)特殊变量
`$0`是一个特殊的变量,在Shell中用于展开为当前Shell或Shell脚本的名称。它在Shell初始化时进行设置。原创 2023-08-12 01:12:31 · 223 阅读 · 0 评论 -
shell从入门到精通(20)杂项讨论
在终端下面一不小心按下了ctrl+s,整个终端就锁住了,不知道原油的同学可能会以为终端卡死了,找不到原因只好关闭终端重新打开,然后下意识还不忘吐槽一句,垃圾ubuntu,动不动卡死。CTRL+S在早期的计算机中用来暂停屏幕的输出,因为那时候的屏幕输出比较慢,眼和手还可以配合使用。现在计算机的屏幕输出非常快,刷刷的。关闭之后,我们发现,ctrl+s变成了shell的历史命令正向查找快捷键,和ctrl+r类似,只不过它是反向查找。有意思的时,锁定期间敲下的字符,解锁后会自动输出到屏幕。我们可以关掉这个功能,原创 2023-03-05 15:17:33 · 784 阅读 · 0 评论 -
shell从入门到精通(21)运行环境讨论
在调用时,shell会扫描自己的环境,并为每个找到的名字创建一个参数,自动标记为导出给子进程使用。执行的命令会继承环境。任何执行的命令继承的环境包括shell的初始环境,其值可以在shell中被修改,减去通过 unset 和 ‘export -n’ 命令删除的任何键值对,再加上通过 export 和 ‘declare -x’ 命令添加的任何内容。换句话说,通过在命令前添加参数赋值语句,可以临时修改该命令执行时所使用的环境变量的值。这些赋值语句只会影响该命令所见的环境,不会影响其他命令或函数的环境。原创 2023-08-12 14:31:53 · 186 阅读 · 0 评论 -
shell从入门到精通(22)shell正则匹配~=
如果匹配成功,BASH_REMATCH[0] 将会存储整个匹配的结果,而 BASH_REMATCH[1]、BASH_REMATCH[2] 和 BASH_REMATCH[3] 分别存储了正则表达式中括号捕获的三个子模式的匹配结果。BASH_REMATCH 数组的第一个元素 (即 BASH_REMATCH[0]) 存储着整个正则表达式匹配的部分,而后续的元素依次存储了正则表达式中使用括号捕获的子模式的匹配结果。捕获匹配结果: 通过使用括号创建子模式,可以捕获匹配到的子字符串,以便后续在脚本中使用。原创 2024-05-26 23:23:58 · 55 阅读 · 0 评论 -
shell从入门到精通(23)贪婪匹配、非贪婪以及独占模式
非贪婪匹配会尽可能少地匹配符合模式的字符,只匹配满足条件的最少字符数。例如,在正则表达式\d+中,加号表示匹配一个或多个数字,而贪婪匹配会尽可能多地匹配连续的数字,直到遇到非数字字符为止。通过使用问号来实现非贪婪匹配,我们可以得到我们需要的最小匹配结果。第一个示例中,使用贪婪匹配模式\d+匹配了字符串中的尽可能多的数字,并将结果打印出来。简而言之,贪婪匹配会尽可能多地匹配,而非贪婪匹配会尽可能少地匹配,根据具体的需求选择适当的匹配方式。在正则表达式中,贪婪匹配和非贪婪匹配是指匹配模式下的不同行为。原创 2024-05-26 23:48:28 · 66 阅读 · 0 评论 -
shell从入门到精通(26)ubuntu 的 bash和dash的区别
自己写的一个while循环结构总是报错,纠结了一下午,各种查资料、改命令行,最后发现是ubuntu系统解释器的原因,脚本没有问题,换一下解释器就OK了。郁卒的要死……什么是bash ?Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bas转载 2021-09-05 20:31:53 · 3039 阅读 · 0 评论 -
shell从入门到精通(28)如何查看和修改当前登录的Shell
文章目录查看系统当前支持哪些shell解释器查看系统当前默认的shell解释器修改默认的shell解释器查看系统当前支持哪些shell解释器root@Administrator:~# cat /etc/shells# /etc/shells: valid login shells/bin/sh/bin/bash/bin/rbash/bin/dash大家需要知道的是,ubuntu系统默认使用的是bash(绝大多数linux系统都采用bash),关于linux的各种shell,我们另写一篇。原创 2021-12-19 23:30:38 · 1230 阅读 · 0 评论 -
shell从入门到精通(30)自动化交互脚本expect工具
文章目录一、概述二、Expect工作原理三、expect用法实战一、概述我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而Expect就使用来实现这种功能的工具。Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自原创 2021-04-03 21:34:18 · 1064 阅读 · 2 评论 -
shell从入门到精通(31)shell原地更新终端输出信息
有时我们需要更新同一行输出信息,而不是输出新行,如进度显示。两种实现方法:输出退格符\b,清除该行输入字符输出回车符\r,然后覆盖已输出的字符对于第1种实现,该行已输出多少字符,需要刚好输出相同数量的\b,以防止某些终端实现把上一行的回车也吃掉了。可使用printf()的返回值得到已输出字符数。对于第2种实现,输出的新字符数量必须不少于已输出的,以完全覆盖之前的输出。本人更倾向于第2种实现,只要保证每行输出的字符数量相同(通过printf()指定参数的输出字符数),实现更简洁、维护性更好。......原创 2022-08-08 01:19:54 · 838 阅读 · 0 评论 -
shell从入门到精通(32)优秀的shell编程习惯和规范
名称长的变量尽量使用小写字母+下划线的方式进行命名,如home_dir常量的定义推荐使用大写字母+下划线进行命名,如HOME_DIR在引用变量时为了避免不必要的麻烦,尽量使用${变量名}的方式进行引用变量名引用的坑的样例#!转载 2022-12-19 18:12:48 · 617 阅读 · 0 评论