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

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

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

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

在企业场景下,“$?”的用法:

(1)判断命令、脚本或函数等程序是否执行成功;

(2)若在脚本中调用执行“exit 数字”,则会返回这个数字给“$?”变量;

(3)如果是在函数里,则通过“return  数字”,把这个数字以函数返回值的形式传给“$?”。

在应用上述特殊位置变量时,也可能会用到下述知识点:

  • 获取脚本的路径:dirname  path/script-name
  • 获取脚本文件名:basename   path/script-name
  • 比如用for循环做简单测试时,for i;do echo $i;done,可能很多网友看到会有些不理解,一般for循环

    会写for i in ...,此处省略了in变量列表,在此相当于有引号的in“[email protected]”

  • 用shift将位置参数移位(左移)

2.Bash Shell内置变量命令

(1)echo:在屏幕上输出信息

命令格式:echo  args  xxx ==>xxx可以是字符串和命令的组合

功能说明:将echo命令后面args指定的字符串及变量等显示到标准输出。

常见参数如下:

(2)eval

命令格式:eval  cmd  ==>cmd包含变量等命令

功能:当shell程序执行到eval语句时,shell读入参数cmd,并将它们组合成一个新的命令,然后去执行,简单点说,

就是eval会对后面的cmd进行两遍扫描,如果第一遍扫描后,cmd是个普通的命令,则执行此命令,如果cmd中含

有变量,则第一遍扫描先确认变量的值,然后进行第二遍扫描,得出结果,例如:

[[email protected] ]# set -- arg1 arg2       ==>通过set设置两个参数
[[email protected] ]# echo $#                    ==>$#表示传参的个数
2
[[email protected] ]# echo \$$#                 ==>由于$#为2,所以此命令就变为echo $2 ,但此时并未输出$2的值,而是输出了$2,

这也就是上述提到的提一次扫描,将$#替换为$2
$2
[[email protected] ]# eval "echo \$$#"      ==>eval进行第2次扫描,直接输出echo $2的值arg2
arg2

(3)exec

命令格式:exec  命令参数

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

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

如下:

[[email protected] scripts]# exec date    ==>执行完此命令,直接退出当前会话
Wed Apr 19 16:18:31 CST 2017

Connection closed.

Type `help‘ to learn how to use Xshell prompt.
Xshell:\>
Connection closed by foreign host.

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

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

例如:

[[email protected] ~]# seq 5 > /tmp/seq.txt

[[email protected] scripts]# cat exec.sh
exec </tmp/seq.txt
while read line
do
 echo $line
done
echo ok
[[email protected] scripts]# sh exec.sh
1
2
3
4
5
ok

(4)read

命令格式:read 变量名表

功能:从标准输入读取字符串等信息,传给shell程序内部定义的变量(后续章节中讲解)

(5)shift:用shift将位置参数移位(左移),将位置参数$1、$2等进行左移,即如果位置参数是$3、$2、$1,

那么执行一次shift后,$3变为$2,$2变为$1,$1就消失了。

(6)exit:shell程序,当然exit也可以选择执行的数字作为返回值。

3.shell变量子串知识

提示:

上述ID为11-14中表达式的冒号可以省略,如果省略了其中的冒号,则将每个定义中的“为空或未赋值”部分改为“未赋值”。

为了方便理解,这里对${#parameter##word}举例说明一下:

${#parameter%%  a*c} :这里的a*c表示匹配的字符串,*表示匹配所有,a*c表示匹配开头为a、中间为任意多字符,结尾为c的字符串。



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

时间: 2024-12-20 01:20:31

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶的相关文章

跟老男孩学Linux运维:Web集群实战优惠预售中

跟老男孩学Linux运维:Web集群实战即将出版 感谢小伙们这么多年对老男孩的持续关注.支持和理解, 为此,我们特别组织预售活动,以网内最低价回馈小伙伴们, 为大家争取的特殊优惠加签名仅限前500名,优惠价预计7折左右! 还剩不到50个名额,大家抓紧了. 1.老男孩内部预售活动报名说明及缴费地址 http://www.huodongxing.com/event/8325097592500  2.京东商城预售地址: http://item.jd.com/11891124.html

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

本文的知识点是关于shell脚本的条件测试的相关内容. 通常在shell脚本中我们需要做各式各样的条件判断,比如,测试一个文件是否存在.是否为文件或目录.是否 具有执行权限等等,所以在shell脚本中,条件判断还是至关重要的.接下来我们进入正题:shell脚本的条件测试. 1.在bash编程中,条件测试常用的语法形式如下表: 提示: 语法1中的test命令和语法2中的[]是等价的.语法3中的[[]]双中括号为扩展的test命令. 语法4中的(())常用于计算. 在双中括号[[]]中可以使用通配符

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算. 1.常见的算术运算符: 提示: 此处对于我自己来说++.--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下: [[email protected] ~]# a=10                  ==>定义变量a[[email protected] ~]# echo $((a++)) ==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.10[[email 

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

跟老男孩学linux运维一书征求大家给建议选择!

跟老男孩学linux运维一书即将出版,征求下大家的建议和选择! 出版社的同学非常辛苦,现在出版社给我们设计了跟老男孩学linux运维一书封面 两个封面,大家觉得哪个好就评论下,一定要二选一啊! 选哪个,说下选择的理由,谢谢大家! 加入本书提供的两个QQ交流群226199808和339128815 (作者和读者交流答疑用) 届时可获得通过抽奖免费获得若干本新书的机会,. 封面1: 封面2:

提供跟老男孩学Linux运维Shell编程实战的第四、第五章源代码

第四章是讲Shell变量知识进阶与实践: 第五章是讲变量的数值计算实践: 附件中包括源码,请下载. 该两章在学习时要注意相关事项: 1.注意标点符号的使用:例如,单引号,反引号,双引号等: 2.注意该要留空格的留空格: 3.注意特殊变量的作用: 4.内置变量的使用: 5.算术运算任的使用.

《跟老男孩学Linux运维》

Linux 介绍 Linux 安装 Linux 调优 Web 基础 Nginx 应用 LNMP 应用 PHP 缓存加速 Nginx 调优 MySQL 应用 NFS 网络文件共享 Nginx 反向代理与负载均衡 Keepalived 高可用集群 Memcached 应用 Nagios 应用

老男孩教育Linux运维课程是如何讲解MySQL数据库的?

老男孩专业DBA课程表如下: http://oldboy.blog.51cto.com/2561410/1951684 本博文课表即将出书<跟老男孩学习Linux运维:MySQL数据库实战>,敬请关注.