shell-的特殊变量-进程状态变量$$ $! $? $_详解
一: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
随机推荐
- qdu-小明的贪心题(最短路+最短路的数量 )
Description 小明来到青岛上学已经一年了,他给青岛这座城市画了一张地图.在这个地图上有n个点,小明的起始点为1号点,终点为n号点,并且地图上的所有边都是单向的.小明知道从i号点到j号点的时间 ...
- Activiti7 任务人员动态分配(理论)
之前一直用的流程模型都是,固态的,写死的 由于固定分配方式,任务只能一步一步执行,执行到每一个任务将按照bpmn的配置去分配任务负责人.这显然在实际开发中是不可能的 所以我们需要动态分配人员 表达式分 ...
- 两篇好文 清晰地描述bug 技术总监的忠告
如何清晰的描述一个bug 一个技术总监的忠告 --2020-02-26--
- 转载:Redis主从复制与高可用方案
转载自: https://www.cnblogs.com/lizhaojun-ops/p/9447016.html 原文链接:http://gudaoyufu.com/?p=1230 redis主从复 ...
- SpringBoot简单(登录/显示/登出)工程下载 附带打包成ROOT.war文件并发布到tomcat里
下载地址:https://files.cnblogs.com/files/xiandedanteng/SessionShare20191226-1.zip 之前的工程仅能在Eclispe里跑起来,要把 ...
- leetcode刷题-86分隔链表
题目 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1->4 ...
- python基础:多进程、多线程
一.定义和区别 1.一个任务就是一个进程,进程就是资源的集合.比如打开浏览器,启动一个进程.当一个进程需要干很多事的时候,就需要执行多个子任务,这些子任务就是线程. 2.线程是包含在进程中的,每个进程 ...
- fiddler工具介绍及证书设置
fiddler 目录 1.Fiddler介绍 01.介绍 02.简单使用 03.结果状态码 介绍完了,接下来就到证书了 2.Fiddler证书设置 这就是fiddler证书设置的全部步骤了 1.Fid ...
- 使用phoenix连接hbase
hbase本身不支持SQL查询,为了实现这个功能,引入了phoenix,通过它可以实现hbase的sql查询.这里记录下如何配置并使用phoenix来操作hbase. 1. 下载地址 phoenix下 ...
- js中的选择排序和冒泡排序
var arr = [12,25,8,16,14]; console.log("排序前数组,",arr) //选择排序:第一轮,找出数组中最小的数,将第一项和最小的数互换位置.第二 ...