预定义变量是在 Shell 一开始时就定义的变量,这一点和默认环境变量有些类似。不同的是,预定义变量不能重新定义,用户只能根据 Shell 的定义来使用这些变量。

严格来说,位置参数变量也是预定义变量的一种,知识位置参数变量的作用比较统一,所以我们把位置参数变量单独划分为一类数量。

那么,预定义变量有哪些呢?我们通过表 1 来说明一下。

表 1 预定义变量

预定义变量

作 用

$?

最后一次执行的命令的返回状态。如果这个变量的值为 0,则证明上一条命令正确执行;如果这 个变量的值为非 0 (具体是哪个数由命令自己来决定),则证明上一条命令执行错误

$$

当前进程的进程号(PID)

$!

后台运行的最后一个进程的进程号(PID)

我们先来看看"$?"这个变量,看起来不好理解,还是举个例子吧,如下:

[root@localhost sh]# ls

count.sh hello.sh parameter2.sh parameter.sh #ls命令正确执行

[root@localhost sh]# echo $?

0

#预定义变量"$?"的值是0,证明上一条命令正确执行

[root@localhost sh]# ls install.log

ls:无法访问install.log:没有那个文件或目录

#当前目录中没有instal.log文件,所以ls命令报错了

[root@localhost sh]# echo $?

2

#变量"$?"返回一个非0的值,证明上一条命令没有正确执行

#至于错误的返回值到底是多少,是在编写ls命令时定义好的,如果碰到文件不存在就返回数值2

这里需要用到进程号(PID)的概念,我们会在后续章节详细介绍。这里大家可以理解为在系统中每个进程都有 HD,我们把这个 ID 称作 PID,系统是通过 PID 来区分不同的进程的。

接下来说明一下"$$"和"$!"这两个预定义变量,写一个脚本如下所示:

[root@localhost sh]# vi variable.sh

#!/bin/bash

echo "The current process is $$"

#输出当前进程的PID

#这个PID就是variable.sh脚本执行时生成的进程的PID

find /root -name hello.sh &

#使用find命令在/root目录下査找hello.sh文件

#符号"&"的意思是把命令放入后台执行

echo "The last one Daemon process is $!"

#输出这个后台执行命令的进程的PID,也就是输出find命令的PID

执行一下这个命令:

[root@localhost sh]# chmod 755 variable.sh

#赋予执行权限

[root@localhost sh]#./variable.sh

The current process is 26970

#脚本variable.s执行时,PID是26970

The last one Daemon process is 26971

#find命令执行时,PID是26971

这里需要注意的是,不论是脚本 variable.sh,还是 find 命令,一旦执行完毕就会停止,所以使用 ps 命令是查看不到这两个进程号的。

一般情况下使用"$?"变量来判断上一条命令是否正确执行,我们后面要讲的test测试命令也是通过"$?"变量来判断上一条命令是否正确执行的。使用"$$"变量来给临时文件命名,以保证临时文件名不会重复。

linux系统预定义变量有哪些,Shell预定义变量用法详解相关推荐

  1. Linux系统与网络、磁盘参数和日志监控等命令详解二

    创作人QQ:851301776,邮箱:lfr890207@163.com, 欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...

  2. Linux系统强制位u+s、g+s、o+t 详解

    Linux系统强制位u+s.g+s.o+t 详解 u+s:一个命令,给与用户s权限,则此用户暂时获得这个命令的属主权限 (例chmod u+s /usr/bin/touch或者chmod 4755 / ...

  3. Shell命令 getopts/getopt用法详解 命令行参数

    Shell命令行参数解析getopts/getopt用法详解 在Linux bash中,可以用以下三中方式解析命令行参数: 直接处理:使用$1.$2.$3- 进行解析 getopts:短选项的情况,例 ...

  4. linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解

    getline用法详解 在默认情况下,awk支持从文件或者STDIN中读取数据.我们也可以使用getline来灵活读取数据,例如在main代码块执行过程中读取某个非待处理文件的数据,或者从某个读取某个 ...

  5. linux crontab 定时关机,Linux系统使用--定时关机的实现以及crontab命令和文件详解...

    一.前言 为了以后不用再半夜跑回实验室关电脑,昨天中午花了两个小时左右的时间搞了一下如何实现Linux系统的定时关机,结果没搞出来.在老师的指点下得以解决,写一博客分享之. 另,发现现在网上的资料越发 ...

  6. linux系统rootkit恶意软件安全检测工具rkhunter安装部署、使用详解

    rkhunter简介: 中文名叫"Rootkit猎手", rkhunter是Linux系统平台下的一款开源***检测工具,具有非常全面的扫描范围,除了能够检测各种已知的rootki ...

  7. Shell中read的用法详解

    read的常用用法如下: read -[pstnd] var1 var2 ... -p 提示语句 -n 字符个数 -s 屏蔽回显 -t 等待时间 -d 输入分界 01). read # 从标准输入读取 ...

  8. Linux学习总结(37)——CentOS7下Firewall防火墙配置用法详解

    centos 7中防火墙是一个非常的强大的功能了,但对于centos 7中在防火墙中进行了升级了,下面我们一起来详细的看看关于centos 7中防火墙使用方法. FirewallD 提供了支持网络/防 ...

  9. shell中test命令用法详解

    1) 与文件检测相关的 test 选项 表1:test 文件检测相关选项列表 文件类型判断 选 项 作 用 -b filename 判断文件是否存在,并且是否为块设备文件. -c filename 判 ...

  10. linux中mkswap命令使用方法,mkswap命令_Linux mkswap 命令用法详解:建立和设置SWAP交换分区...

    mkswap命令用于在一个文件或者设备上建立交换分区.在建立完之后要使用sawpon命令开始使用这个交换区.最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般 ...

最新文章

  1. 设置显示Git的修改历史History快捷键Alt+H,方便多人开发的时候快速查看谁修改了代码
  2. 大哥你怕是没听过:头上没毛,代码不牢!
  3. 理解操作系统IO多路复用
  4. Eclipse出现ContextLoaderListener not find
  5. java ready()_Java.io.BufferedReader.ready()方法实例
  6. sql注入语句示例大全_SQL Group By语句用示例语法解释
  7. 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...
  8. 7-7 六度空间(30 分)
  9. Linux学习-RPM 软件管理程序: rpm
  10. 精读《手写 SQL 编译器 - 性能优化之缓存》
  11. 移动宽带连接不上mysql_MySQL Workbench 6.2.4 下载 因为移动网络打不开官方也可能是国内网络问题 备用自己...
  12. CORS基础要点:关于dataType、contentType、withCredentials
  13. 原来iPhone手机还能自动清理垃圾!简单几步,就能多出几个G内存
  14. Python 四阶龙格库塔法求积分
  15. 重邮第八届ACM大赛-决赛题解报告
  16. 【20点埃及 VS 乌拉圭/23点摩洛哥vs 伊朗】快看人工只能预测结果(附最全赛事时间表)...
  17. JAVA生成带LOGO的二维码
  18. python并发之concurrent快速入门
  19. RS485通信接口设计方案
  20. OV、DV、EV证书的区别

热门文章

  1. c++ 初始化 代码 应放在那里_Go语言goroutine调度器初始化 (12)
  2. linux进程khungtaskd,Linux查看进程的所有信息的方法示例
  3. 自己搭建个对象存储服务难不难?
  4. 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则
  5. 当MyBatis 3.5.X遇上JDK8竟然出现了性能问题,全项目组都得加班~
  6. 自定义注解加AOP怎么玩?
  7. Java 异常处理的 9 个最佳实践 1
  8. OkHttp3 websocket
  9. reid2019-2021
  10. python url请求