我们之前说过,Shell中的变量不是按照变量值的类型来进行分类的,而是按照Linux系统中定义的变量类别来分类的。

预定义变量就是,事先把变量的名称和作用确定好(都是不可变的),只能修改变量的内容,也就是变量的值。

其实预定义变量和位置参数变量都可以统称为预定义变量(有分开说明的,也有一起说明的,知道就行)。

预定义变量如下:

预定义变量 作用
$? $?中存的值,是最后一次执行的命令的返回状态。
如果这个变量的值为0,证明上一个命令正确执行;
如果这个变量的值为非0(具体是哪个数,由命令自己来决定),
则证明上一个命令执行不正确了。(常用)
$$ 当前进程的进程号(PID)。
$! 后台运行的最后一个进程的进程号(PID)。

1、预定义变量$?

$?这个预定义变量,在我们写Shell脚本的时候,还是比较常用。

我们下边来写一个例子进行说明。

# 执行ls命令
# ls命令正确执行
[root@Lyl tmp]# ls
count.sh for.sh parameter.sh param.sh # 预定义变量"$?"的值是0,证明上一个命令执行正确,
# "$?"记录的是在执行"$?",或者值查询"$?"之前,
# 最后一条命令的执行返回状态。
[root@Lyl tmp]# echo $?
0 # 当前目录中没有install.log文件,所以ls命令报错了。
[root@Lyl tmp]# ls install.log
ls: 无法访问install.log: 没有那个文件或目录 # 变量"$?"返回一个非0的值,证明上一个命令没有正确执行,
# 至于错误的返回值到底是多少,是在编写ls命令时定义好的,
# 如果碰到文件不存在就返回数值2。
[root@Lyl tmp]# echo $?
2 # 输出错误命令的时候,命令状态返回值一般都是127。
[root@Lyl tmp]# adfasdf
-bash: adfasdf: command not found
[root@Lyl tmp]# echo $?
127

预定义变量$?的常用使用方式:

比如在写一个脚本的时候,要判断apache服务是否在运行。

有很多种实现方式,

比如搜索Linux系统中是否有apache服务的进程id号,如果能找到,$?的返回值为0,就确认了apache服务正在运行。

如果$?值不等于0,则证明apache服务没有启动。

有一个例子,我们前边在说Bash多命令顺序执行的时候,文章如下:

https://www.cnblogs.com/liuyuelinfighting/p/16082830.html

判断的条件就是$?=0。

2、预定义变量$$和$!

预定义变量$$和$!,在实际工作中用的不多,了解一下。(但是都要记住)

Linux系统下的进程是依赖进程的id号进行区分的,叫做pid,也就是进程id。

# 定义一个脚本variable.sh
[root@Lyl tmp]# variable.sh # 脚本内容如下: #!/bin/bash # 输出当前进程的PID。
# 这个PID就是variable.sh这个脚本执行时,生成的进程的PID。
echo "The current process is $$" # 使用find命令在root目录下查找hello.sh文件
# 符号&的意思是把命令放入后台执行。
find /root -name hello.sh & # 输出这个后台执行命令的进程的PID,
# 也就是输出find命令的PID号
echo "The last one Daemon process is $!"

提示:将命令放入后台执行,请查看文章:https://www.cnblogs.com/liuyuelinfighting/p/15710694.html。

『忘了再学』Shell基础 — 17、预定义变量的更多相关文章

  1. 『忘了再学』Shell基础 — 12、用户自定义变量

    目录 1.变量定义 2.变量调用 3.变量的修改 4.查看变量 (1)-u选项说明: (2)-x选项说明: (3)set命令说明: 5.变量删除 1.变量定义 变量正确定义. 格式:变量名=" ...

  2. 『忘了再学』Shell基础 — 16、位置参数变量

    目录 1.位置参数变量$n 2.位置参数变量$*和$@ 3.位置参数变量$# 位置參数变量的作用主要用于脚本的传参. 位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变 ...

  3. 『忘了再学』Shell基础 — 13、环境变量(一)

    目录 1.用户自定义的环境变量 (1)环境变量设置 (2)查询自定义环境变量 (3)删除自定义环境变量 2.系统自带的环境变量--PATH环境变量 (1)PATH环境变量 (2)PATH环境变量的作用 ...

  4. 『忘了再学』Shell基础 — 14、环境变量(二)

    目录 1.PS1变量的作用 2.PS1变量的查看 2.PS1可以支持的选项 3.PS1环境变量的配置 4.总结 提示: 在Linux系统中,环境变量分为两种.一种是用户自定义的环境变量,另一种是系统自 ...

  5. 『忘了再学』Shell基础 — 15、环境变量(三)

    目录 1.LANG语系变量介绍 2.如何查看Linux中支持的语系 3.查看当前系统的语系 4.总结 提示: 在Linux系统中,环境变量分为两种.一种是用户自定义的环境变量,另一种是系统自带的环境变 ...

  6. 『忘了再学』Shell基础 — 11、变量定义的规则和分类

    目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...

  7. 『忘了再学』Shell基础 — 9、Bash中的特殊符号(一)

    目录 1.双单引号 2.双引号 3.$符号 4.反引号 5.$()符号 6.#符号 7.\符号 1.双单引号 '':单引号.在单引号中所有的特殊符号,如$和"`"(反引号)都没有特 ...

  8. 『忘了再学』Shell基础 — 3、echo命令的介绍与使用

    目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...

  9. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

随机推荐

  1. Vue中获取元素宽高

    <div ref="init"></div> 写在 页面 方法 部分 这里的 offsetHeight 是返回元素的宽度(包括元素宽度.内边距和边框,不包括 ...

  2. 体验js之美第八课-面向对象创建和继承终结篇

    概述 到这里我们讲说js面向对象的系列部分的最后一个课程,面向对象必须掌握两个东西一个是对象的创建一个是继承.这节课我们重点说说这两个问题最后我们说下在ES6里面面向对象怎么玩. 1对象的创建 我们第 ...

  3. 小程序输入框闪烁BUG解决方案

    前言 本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的. 问题描述 在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标 ...

  4. WordPress 网站开发“微信小程序“实战(三)

    本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...

  5. 基于React的仿QQ音乐(移动端)

    前言 由于这段时间工作上也是挺忙的,就没有时间去写这个项目,中间一直都是写写停停,进度也是非常慢的.正好前几天都还比较空,就赶紧抓着空闲时间去写这个项目,最后紧赶慢赶地完成了.本项目采用了React的 ...

  6. 移动端input输入框把页面顶起, 收起键盘页面复原不了问题

    我相信大家平时也会遇到这种问题, 移动端 input 或者 textarea获取光标, 整个页面被顶起来, 键盘收起, 页面不复原的问题 ====>>>>  我这边提供两种解决 ...

  7. centos6的yum源更新版本

    概述 centos6系统从2020年12月1号开始不再维护,官方的yum源不再可用,同时国内的阿里云镜像和163镜像也都不再可用. 但是我们有一些老的服务器仍然在使用centos6系统版本,依赖库的安 ...

  8. Java 使用-安装

    Java 使用-安装 官方网站 JDK 下载地址 JDK 历史版本 参考资料 CentOS7系统卸载自带的OpenJDK并安装SUNJDK CentOS7卸载 OpenJDK 安装Sun的JDK8 安 ...

  9. 获取ul中li的value值

    <script> $(function(){ $(".month-list").find("li").click(function(){ var t ...

  10. Mysql学习day1

    安装了Mysql以及SQLyog,将SQLyog和数据库做了连接. 学习了基础数据类型以及命令行语句 1 alter table `student` rename as `stu``lesson` 2 ...