shell编程实战(shell编程实战.pdf)

shell编程实战(shell编程实战.pdf)本文讲解 shell 变量知识进阶 以下为知识点的总结 关于练习 本文不不涉及 还需要各位小伙伴自己练习 1 shell 中的特殊位置参数变量 请见下表 在企业场景下 的用法 p p p span style font size 14px 1 判断命令 脚本或函数等程序是否执行成功 lt span p

大家好,我是讯享网,很高兴认识大家。



本文讲解shell变量知识进阶。

以下为知识点的总结,关于练习,本文不不涉及,还需要各位小伙伴自己练习!

1.shell中的特殊位置参数变量,请见下表:

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶_shell脚本
讯享网

在企业场景下,“\(?”的用法:</span></p><p><span style="font-size: 14px;">(1)判断命令、脚本或函数等程序是否执行成功;</span></p><p><span style="font-size: 14px;">(2)若在脚本中调用执行“exit 数字”,则会返回这个数字给“\)?”变量;

(3)如果是在函数里,则通过“return&nbsp; 数字”,把这个数字以函数返回值的形式传给“\(?”。</span></p><p><br/></p><p><span style="font-size: 14px;">在应用上述特殊位置变量时,也可能会用到下述知识点:</span></p><p><span style="font-size: 14px;">2.Bash Shell内置变量命令</span></p><p><span style="font-size: 14px;">(1)echo:在屏幕上输出信息</span></p><p><span style="font-size: 14px;">命令格式:echo&nbsp; args&nbsp; xxx ==&gt;xxx可以是字符串和命令的组合</span></p><p><span style="font-size: 14px;">功能说明:将echo命令后面args指定的字符串及变量等显示到标准输出。</span></p><p><span style="font-size: 14px;">常见参数如下:</span></p><p><img width="600" height="149" title="shell9.png" alt='《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶_shell_02' src="https://s2.51cto.com/wyfs02/M00/91/98/wKiom1j2_GWBleKxAAArlrOhZTw459.png?x-oss-process=image/resize,m_fixed,w_1184"/></p><p><span style="font-size: 14px;">(2)eval</span></p><p><span style="font-size: 14px;">命令格式:eval&nbsp; cmd&nbsp; ==&gt;cmd包含变量等命令</span></p><p><span style="font-size: 14px;">功能:当shell程序执行到eval语句时,shell读入参数cmd,并将它们组合成一个新的命令,然后去执行,简单点说,</span></p><p><span style="font-size: 14px;">就是eval会对后面的cmd进行两遍扫描,如果第一遍扫描后,cmd是个普通的命令,则执行此命令,如果cmd中含</span></p><p><span style="font-size: 14px;">有变量,则第一遍扫描先确认变量的值,然后进行第二遍扫描,得出结果,例如:</span></p><pre><span style="font-size: 14px;">[root@www ]# set -- arg1 arg2 &nbsp; &nbsp; &nbsp; <span style="font-size: 14px; color: rgb(227, 108, 9);">==&gt;通过set设置两个参数</span><br/>[root@www ]# echo \)# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ==&gt;\(#表示传参的个数</span><br/>2<br/>[root@www ]# echo \)\(# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size: 14px; color: rgb(227, 108, 9);">==&gt;由于\)#为2,所以此命令就变为echo \(2 ,但此时并未输出\)2的值,而是输出了\(2,<span style="font-size: 14px; color: rgb(227, 108, 9);">这也就是上述提到的提一次扫描,将\)#替换为\(2</span></span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>\)2
[root@www ]# eval &quot;echo $\(#&quot; &nbsp; &nbsp; &nbsp;<span style="font-size: 14px; color: rgb(227, 108, 9);">==&gt;eval进行第2次扫描,直接输出echo \)2的值arg2

arg2

(3)exec

命令格式:exec&nbsp; 命令参数

功能:exec命令能够在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该进程也就

终止了,如果是远程连接的会话,则执行完命令后,该会话直接退出。

如下:

[root@www scripts]# exec date &nbsp; &nbsp;==&gt;执行完此命令,直接退出当前会话
Wed Apr 19 16:18:31 CST 2017
Connection closed.
Type `help‘ to learn how to use Xshell prompt.
Xshell:&gt;
Connection closed by foreign host.

讯享网

另外,当使用exec打开文件后,read命令每次都会将文件指针移动到文件的下一行进行读取,直至文件末尾,

利用这个可以实现处理文件内容。

例如:

讯享网[root@www ~]# seq 5 &gt; /tmp/seq.txt
[root@www scripts]# cat exec.sh
exec &lt;/tmp/seq.txt
while read line
do
echo \(line<br/>done<br/>echo ok<br/>[root@www scripts]# sh exec.sh <br/>1<br/>2<br/>3<br/>4<br/>5<br/>ok<br/></span></pre><p><span style="font-size: 14px;">(4)read</span></p><p><span style="font-size: 14px;">命令格式:read 变量名表</span></p><p><span style="font-size: 14px;">功能:从标准输入读取字符串等信息,传给shell程序内部定义的变量(后续章节中讲解)</span></p><p><span style="font-size: 14px;">(5)shift:用shift将位置参数移位(左移),将位置参数\)1、\(2等进行左移,即如果位置参数是\)3、\(2、\)1,
那么执行一次shift后,\(3变为\)2,\(2变为\)1,\(1就消失了。</span></p><p><span style="font-size: 14px;">(6)exit:shell程序,当然exit也可以选择执行的数字作为返回值。</span></p><p><span style="font-size: 14px;">3.shell变量子串知识</span></p><p><img width="720" height="305" title="1.png" alt='《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶_shell_03' src="https://s2.51cto.com/wyfs02/M01/91/B9/wKioL1j4D1jCzTX-AAFOmugkd9o187.png?x-oss-process=image/resize,m_fixed,w_1184"/></p><p></p><p><span style="font-size: 14px;">提示:</span></p><p><span style="font-size: 14px;">上述ID为11-14中表达式的冒号可以省略,如果省略了其中的冒号,则将每个定义中的“为空或未赋值”部分改为“未赋值”。</span></p><p><span style="font-size: 14px;">为了方便理解,这里对\){#parameterword}举例说明一下:${#parameter%%&nbsp; a*c}&nbsp;:这里的a*c表示匹配的字符串,*表示匹配所有,a*c表示匹配开头为a、中间为任意多字符,结尾为c的字符串。

以上为本人在读《跟老男孩学Linux运维之shell编程实战》这本书时的笔记,如有任何版权问题,请联系留言。



小讯
上一篇 2025-05-27 22:50
下一篇 2025-05-15 21:10

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/136612.html