蓝湖内推(北京尽微致广信息技术有限公司 ),前后端测开大量HC,坐标北京朝阳区望京SOHO,福利多多,欢迎小伙伴们投递。
内推码: BSW6GF7
投递链接:
本文首先介绍了 Shell 编程是什么,并带大家快速入门,随后讲解 Shell 的基本语法并结合案例重点分析用法。包括 Shell 流程控制和自定义函数等。建议收藏。
谁需要学习 Shell 编程?
- Linux运维工程师:编写Shell程序进行服务集群管理。
- Python和JavaEE程序员:编写Shell脚本程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
- 大数据程序员:编写Shell程序来管理集群。
Shell 是什么?
Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
Shell 编程快速入门
进入 Linux 终端,编写一个 Shell 脚本 hello.sh :
终端打印出 。
说明:
- 告诉系统这个脚本需要什么解释器来执行。
- 文件扩展名 不是强制要求的。
- 方法1 直接运行解释器, 作为 Shell 解释器的参数。此时 Shell 脚本就不需要指定解释器信息,第一行可以去掉。
- 方法2 hello.sh 作为可执行程序运行,Shell 脚本第一行一定要指定解释器。
Shell 变量
定义
Shell 变量分为系统变量和自定义变量。系统变量有\(HOME、\)PWD、\(USER等,显示当前 Shell 中所有变量: 。 <br/>变量名可以由字母、数字、下划线组成,不能以数字开头。<br/><b>基本语法</b></p><ul><li data-pid="l34Z_BO8"><b>定义变量:</b>变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。</li><li data-pid="8w196A2n"><b>删除变量:</b>unset 变量名 。</li><li data-pid="N8Yufcbh"><b>声明静态变量:</b>readonly 变量名,静态变量不能unset。</li><li data-pid="L-GPjzHe"><b>使用变量:</b>\)变量名
将命令返回值赋给变量(重点)
- A=
ls反引号,执行里面的命令 - A=\((ls) 等价于反引号</li></ul><p data-pid="Aw9A0Z6K"><b>Shell 环境变量</b><br/><b>定义</b></p><figure data-size="normal"><div style="width: 100%; height: 0; padding-bottom: 76.11%;"><img data-src="https://pic4.zhimg.com/v2-42d4bcd62135b3508aa4ad7f3_b.jpg?consumer=ZHI_MENG" data-sign="lazyloadimg" src="https://pic4.zhimg.com/v2-42d4bcd62135b3508aa4ad7f3_b.jpg?consumer=ZHI_MENG" data-caption="" data-size="normal" data-rawwidth="601" data-rawheight="458" class="origin_image zh-lightbox-thumb" width="601" data-original="https://pic4.zhimg.com/v2-42d4bcd62135b3508aa4ad7f3_r.jpg" data-original-token="v2-acb8352c8e9c078ee05de6b8dbfd8096"/></div></figure><p data-pid="wnav5dmu"><br/><b>基本语法</b></p><ol><li data-pid="tZSvKDJa">export 变量名=变量值,将 Shell 变量输出为环境变量。</li><li data-pid="WaQiiyJB">source 配置文件路径,让修改后的配置信息立即生效。</li><li data-pid="CMUFfXYx">echo \)变量名,检查环境变量是否生效
- \(n :\)0 代表命令本身、\(1-\)9 代表第1到9个参数,10以上参数用花括号,如 \({10}。</li><li data-pid="jPMKg0gy">\)* :命令行中所有参数,且把所有参数看成一个整体。
- \(@ :命令行中所有参数,且把每个参数区分对待。</li><li data-pid="Fc48dsWP">\)# :所有参数个数。
- $\( :当前进程的 PID 进程号。</li><li data-pid="lgktz5O2">\)! :后台运行的最后一个进程的 PID 进程号。
- \(? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。</li></ul><p data-pid="Px1l8Ur-"><b>实例:</b><br/>编写 Shell 脚本 prePara.sh ,输出命令行输入的各个参数信息。</p><p data-pid="ZVskHq"><br/>运行结果:</p><p data-pid="kJmpDo1y"><br/><b>运算符</b><br/><b>基本语法</b></p><ul><li data-pid="0IFD1HSQ">\)((运算式)) 或 \([运算式]</li><li data-pid="rgYuePFZ">expr m + n 注意 expr 运算符间要有空格</li><li data-pid="wNN3-JUw">expr m - n</li><li data-pid="nes4HJmv">expr *,/,% 分别代表乘,除,取余</li></ul><p data-pid="kTBu4lO6"><b>实例</b></p><p data-pid="ekN0IW0a"><br/><b>条件判断</b><br/><b>基本语法</b><br/>[ condition ] 注意condition前后要有空格。非空返回0,0为 true,否则为 false 。<br/><b>实例</b></p><p data-pid="CkNTpDXq"><br/>运行结果:</p><p data-pid="VeaM7BAN">编写 Shell 程序:如果输入的参数大于60,输出“及格”,否则输出“不及格”。</p><p data-pid="PTeFCqJQ">当命令行参数为1时输出“周一”,2时输出“周二”,其他情况输出“其它”。</p><ol><li data-pid="J4aQnAC5">打印命令行输入的参数。</li></ol><p data-pid="_59alXmz">运行结果(回顾一下 \)* 和 $@ 的区别):
位置参数变量
基本语法
实例:
编写 Shell 脚本 positionPara.sh ,输出命令行输入的各个参数信息。

预定义变量
定义
在赋值定义之前,事先在 Shell 脚本中直接引用的变量。
基本语法
2. 输出从1加到100的值。
输出从1加到100的值。
read(选项)(参数)
选项
- -p:指定读取值时的提示符
- -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。
参数
- 变量名:读取值的变量名
读取控制台输入一个num值。
运行结果:

和其它编程语言一样,Shell 编程有系统函数和自定义函数,本文只举两个常用系统函数。
- basename,删掉路径最后一个 / 前的所有部分(包括/),常用于获取文件名。
基本语法 - basename [pathname] [suffix]
- basename [string] [suffix]
- 如果指定 suffix,也会删掉pathname或string的后缀部分。
实例
- dirname,删掉路径最后一个 / 后的所有部分(包括/),常用于获取文件路径。
基本语法 - dirname pathname
- 如果路径中不含 / ,则返回 ‘.’ (当前路径)。
实例
计算输入两个参数的和。
恭喜!你已经掌握了 Shell 的基本语法,入门很简单。想要更系统的探索Shell编程,可以和我一起深入学习接下来的高级篇。老样子,向大家推荐一本最值得购入和收藏的程序员必读好书:
《深入理解计算机系统》属于圣经级别的众多国内外名校教材(北大清华上海交大,国外简直更多了),罕见的豆瓣评分9.5,也是我最喜欢的专业书。读过好几遍了,不管是学生还是开发老手,这绝对是程序员最值得投资并且之后不会后悔的书,有点难,但很有用,想要电子版的也可以私信我,免费送你。
如果本文对你有帮助,收藏完了也点个赞互相鼓励一下吧~另外欢迎大家关注我的主页,会不定期输出有价值的内容。
不看后悔系列:
Linux针对很多常用命令增加了很多新的更加有用高效的新命令,这些命令不但可以大大提高工作效率和体验,让你在同事面前装那啥的利器,如果能在面试新工作时提起这类命令,更是能给面试官眼前一亮的加分项,下面展示了几个在工作中最常用的命令。
- 如果你想要有语法高亮的 ,可以试试 命令。
- 增强了 命令,如果你需要在很多目录上浏览各种文件 , 命令可以比 和 更有效率,甚至可以在你的终端预览图片。
- 是一个比 更简单更快的命令,他还会自动地忽略掉一些你配置在 中的文件,以及 下的文件。
- 会是一个很好用的文件搜索神器,其主要是搜索当前目录以下的文件,还可以使用 边搜索文件边浏览内容。
- 是一个上古神器,然而,、 和 是更好的grep,和上面的 一样,在递归目录匹配的时候,会使用你配置在 中的规则。
- 是一个危险的命令,尤其是各种 ,所以, 是一个更好的删除命令。
- 命令是好读文档的命令,但是man的文档有时候太长了,所以,你可以试试 命令,把文档上的一些示例整出来给你看。
- 如果你想要一个图示化的,你可以试试 。
- 如果你想搜索以前打过的命令,不要再用 Ctrl +R 了,你可以使用加强版的 。
- 是 top 的一个加强版。然而,还有很多的各式各样的top,比如:用于看IO负载的 ,网络负载的 , 以及把这些top都集成在一起的 。
- 比 du 好用多了。另一个选择是 。
- 如果你想把你的命令行操作录制成一个 SVG 动图,那么你可以尝试使用 和 。
- 是一个可以用来替代 和 的 http 客户端, 支持 json 和语法高亮,可以使用简单的语法进行 http 访问: 。
- 在需要经常登录远程服务器工作的时候会很有用,可以保持远程登录的会话,还可以在一个窗口中查看多个 shell 的状态。
- 是个神器,在你登录远程服务器的时候也能使用本机的 shell 的 rc 文件中的配置。
- 这个是一个轻量级的分析统计日志文件的工具,主要是分析各种各样的 access log。
往期高收藏:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/198587.html