一:shell的特殊变量-进程状态变量详解
  1. 进程状态变量

$$   获取当前shell的进程号(pid)
$! 执行上一个指令的pid,上一个后台运行进程的进程号
$? 获取执行上一个指令的返回值(0为成功,非零为失败)
$_ 在此之前执行的命令(上一个命令)或脚本的最后一个参数

举例(通过脚本举例,)
  范例:举例$$

范例1:举例$$
[root@1-241 scripts]# echo $$
76037
[root@1-241 scripts]# ps -ef |grep 76037
root 76037 76035 0 05:26 pts/1 00:00:00 -bash
范例2:举例$$
[root@1-241 scripts]# cat 2.sh
echo $$ >/scripts/a.log
while true
do
uptime
sleep 2
done
[root@1-241 scripts]# cat a.log
76918
[root@1-241 scripts]# ps 76918
PID TTY STAT TIME COMMAND
76918 pts/1 S+ 0:00 sh 2.sh

范例1:举例$?

[root@1-241 scripts]# jjklk
-bash: jjklk: command not found
[root@1-241 scripts]# echo $?
127
[root@1-241 scripts]# echo $?
0
提示:
$?:相当有用,是判断上一个命令是否执行成功

2. $?返回值参考  

0                      表示运行成功
2 权限拒绝
1~125 表示运行失败,脚本命令、系统命令错误或参数传递错误
126 找到该命令了,但是无法执行
127 未找到要运行的命令
>128 命令被系统强制结束
提示:
在脚本调用,一般用exit 0,函数retrun 0。

 3. 举例(通过脚本举例,大家也可以一行行执行测试):

[root@1-241 scripts]# cat all.sh
echo '$0 获取当前执行的shell脚本的文件名:' $0
echo '$n 获取当前执行的shell脚本的第n个参数值,n=1..9:' '$1'=$1 '$2'=$2 "\$3=$3"
echo '$* 获取当前shell的所有参数 , $1 $2 $3 ....注意与$#的区别:' $*
echo '$# 获取当前shell命令行中参数的总个数:' $#
echo '$$ 获取当前的shell的进程号(PID):' $$
sleep 2 &
echo '$! 执行上一个指令的PID:' $!
echo '$? 获取执行的上一个指令的返回值:' $?
echo '$@ 这个程序的所有参数 “$1” "$2" "$3" "...":' $@
echo '$_ 在此之前执行的命令或脚本的最后一个参数:' $_

 执行结果:

$0  获取当前执行的shell脚本的文件名: all.sh
$n 获取当前执行的shell脚本的第n个参数值,n=1..9: $1=aa $2=bb $3=cc
$* 获取当前shell的所有参数 , $1 $2 $3 ....注意与$#的区别: aa bb cc
$# 获取当前shell命令行中参数的总个数: 3
$$ 获取当前的shell的进程号(PID): 77147
$! 执行上一个指令的PID: 77148
$? 获取执行的上一个指令的返回值: 0
$@ 这个程序的所有参数 “$1” "$2" "$3" "...": aa bb cc
$_ 在此之前执行的命令或脚本的最后一个参数: cc

  

 

 

随机推荐

  1. Codeforces1312E Array Shrinking 区间DP

    题意 给你一个数组\(a\),只要满足\(a_i=a_{i+1}\)就可以将这两个元素合并成一个值为\(a_i+1\)的元素,问数组最小长度. 解题思路 记得之前某场的F和这题差不多,当时好像是相邻且 ...

  2. 基于PHP实现CMS识别

    最近正在开发一款基于PHP实现的Web安全检测平台,写到了CMS识别这一功能,便写一篇文章总结一下. 首先需要梳理的是CMS识别的几种方法: 1.网页源代码特征:例如源代码中包含CMS的名称或是某种特 ...

  3. 给IE9及其以下等不支持classList属性的浏览器,添加classList属性

    // 解决IE9及其以下 不支持classList属性的问题 if (!("classList" in document.documentElement)) { Object.de ...

  4. Tomcat7.0.99集群使用Redis共享session方案

    以前配置过给予多播的session共享方案,这回再配置一个redis共享session的. 先小小的炫耀一下: 相信大家要做Tomcat+Redis+session配置,遇到的头号麻烦就是编译的tom ...

  5. 哦!这该死的 C 语言

    前言 C 语言是一门抽象的.面向过程的语言,C 语言广泛应用于底层开发,C 语言在计算机体系中占据着不可替代的作用,可以说 C 语言是编程的基础,也就是说,不管你学习任何语言,都应该把 C 语言放在首 ...

  6. MySQL教程 | 菜鸟教程

    装数据库失败后的重装步骤!!! --[创建数据库]CREATE DATABASE <数据库名>: --使用mysqladamin 创建数据库-- 使用普通用户,你可能需要特定的权限来创建或 ...

  7. SpringMVC执行流程源码分析

    SpringMVC执行流程源码分析 我们先来看张图片,帮助我们理解整个流程 然后我们开始来解析 首先SpringMVC基于Servlet来运行 那么我们首先来看HttpServletBean这个类 他 ...

  8. SpringBoot整合MinIO

    今天因为公司的需求接触到这个东西,我们先来看下MinIO的官网简介 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大 ...

  9. pycharm代码中批量粘贴内容的快捷键

    windows电脑中,竖向批量复制的快捷键:Alt

  10. 送命题:讲一讲Mybatis插件的原理及如何实现?

    持续原创输出,点击上方蓝字关注我吧 目录 前言 环境配置 什么是插件? 如何自定义插件? 举个栗子 用到哪些注解? 如何注入Mybatis? 测试 插件原理分析 如何生成代理对象? 如何执行? 总结 ...