当前位置 : 主页 > 编程语言 > 其它开发 >

『忘了再学』Shell基础 — 17、预定义变量

来源:互联网 收集:自由互联 发布时间:2022-05-28
目录 1、预定义变量 $? 2、预定义变量 $$ 和 $! 我们之前说过,Shell中的变量不是按照变量值的类型来进行分类的,而是按照Linux系统中定义的变量类别来分类的。 预定义变量就是,事先

目录
  • 1、预定义变量$?
  • 2、预定义变量$$$!

我们之前说过,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。

上一篇:基础篇:java GC 总结,建议收藏
下一篇:没有了
网友评论