一: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. Educational Codeforces Round 65 (Rated for Div. 2)(ACD)B是交互题,不怎么会

    A. Telephone Number A telephone number is a sequence of exactly 11 digits, where the first digit is  ...

  2. webservice的某些配置

    ajax调用的时候配置 <system.webServer> <validation validateIntegratedModeConfiguration="false& ...

  3. 使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面

    世界上唯一不变的东西就是变化,我们通过总结变化的规律,以规律来应付变化,一切事情处理起来事半功倍.我们在开发后端服务代码,前端界面代码的时候,界面都是依照一定的规律进行变化的,我们通过抽取数据库信息, ...

  4. Istio 运维实战系列(1):应用容器对 Envoy Sidecar 的启动依赖问题

    本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 故障现象 该问 ...

  5. RocketMQ生产部署架构如何设计

    前言 看了我们之前的文章,相信小伙伴们对RocketMQ已经有了一个初步的了解,那么今天我们就来聊一聊具体如何来设计一套高可用的生产部署架构. 在聊如何设计这套架构的同时,我们再补充一些之前没提到的知 ...

  6. SpringBoot整合MinIO

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

  7. linux(centos)下密码有效期和密码复杂度设置

    1.密码有效期 方法一: chage -l 用户名 查看用户的过期时间 chage -M 99999 用户名 用命令修改过期时间为永久 chage -M 90 用户名 设置密码有效期为90天 chag ...

  8. oracle之SQL的基本函数

    SQL的基本函数 2.1 单行函数与多行函数 单行函数:指一行数据输入,返回一个值的函数.所以查询一个表时,对选择的每一行数据都返回一个结果. SQL>select empno,lower(en ...

  9. netty之bootstrap

    转载自https://blog.csdn.net/zxhoo/article/details/17419229 Netty4学习笔记(2)-- Bootstrap Netty4的代码比我想象的要复杂的 ...

  10. 趣图:调试bug进行时

      扩展阅读 趣图:大神写实,左脚程序继续运行,右脚程序调试 趣图:Bug 多了,总有一个会把你坑了 趣图:领导在旁,只求代码无Bug