Shell之特殊变量

一、特殊变量概述

在shell中有两类特殊的变量,一类被称为位置变量,另一类被称为进程状态变量。下面列出位置变量和进程状态变量的具体内容:

  • 位置变量
变量 描述
$0 获取当前执行的shell脚本的文件名,包括脚本路径
$n 获取当前执行的shell脚本的第n个参数值,n=1...9,如果n>9,使用括号扩起来$(10)
$* 获取当前shell的所有参数,将所有的命令行参数当作单个字符串,相当于“$1$2$3...”
$@ 获取程序的所有的参数,“$1” “$2”...
$# 获取当前执行的shell脚本后面紧跟的参数个数
  • 进程状态变量
变量 描述
$$ 获取当前shell的进程号(PID)
$! 执行上一个命令的PID
$? 获取执行上一个指令的返回值(0为成功,非0为失败)
$_ 在此之前执行的命令或脚本的最后一个参数

二、位置变量

1、$0

[root@localhost project]# cat test.sh 
echo $0
[root@localhost project]# sh test.sh 
test.sh

[root@localhost project]# sh `pwd`/test.sh
/project/test.sh

2、$n

[root@localhost project]# cat test.sh 
echo $1
[root@localhost project]# sh test.sh xiaoshen
xiaoshen
[root@localhost project]# sh test.sh xiaoshen xiaozhang
xiaoshen
[root@localhost project]# sh test.sh "xiaoshen xiaozhang"
xiaoshen xiaozhang

$1表示接收一个参数,加引号表示一个参数。

3、$*

[root@localhost project]# cat test.sh 
echo $*

[root@localhost project]# sh test.sh xiaoshen xiaozhang
xiaoshen xiaozhang

4、$@

[root@localhost project]# cat test.sh 
echo $@
[root@localhost project]# sh test.sh xiaoshen xiaozhang
xiaoshen xiaozhang

5、$#

[root@localhost project]# cat test.sh 
echo $1
echo $#

[root@localhost project]# sh test.sh xiaoshen xiaozhang
xiaoshen
2

三、进程状态变量

1、$$ 

[root@localhost project]# echo $$
1973

  $$另一个应用是总是启动同一个脚本,如果该脚本已经启动,可以kill掉然后重启,可以先将该脚本运行后的pid存入到文本文件,如果再次运行该脚本,先去读取pid,kill掉重启。

#!/bin/sh
PID_PATH=/project/a.pid 
if [ -f "$PID_PATH" ] 
   then
      kill -USER2 `cat $PID_PATH`>/dev/null 2>&1
      rm -f $PID_PATH
fi
echo $$>$PID_PATH
sleep 200

2、$?

[root@localhost project]# echo $$
1973
[root@localhost project]# echo $?
0
原文地址:https://www.cnblogs.com/shenjianping/p/14269872.html