POSIX中shell下的常用变量结束状态和test表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POSIX中shell下的常用变量结束状态和test表达式相关的知识,希望对你有一定的参考价值。

  在开源的Unix系统中平时为了方便管理就一定会大量使用shell脚本,而在平时在写script的时候快速有效就是有很多内置的变量可以使用,在这里就简单总结整理下,以便于平时写script时快速查阅,POSIX中shell的内置变量如下:

变量意义
#
目前进程的参数个数
@
传递给当前进程的命令行参数
-
连字号,在引用时给予shell的参数选项
?
前一命令的退出状态
$
shell进程的进程编号,一般用的是-bash进程
0
shel程序的名称

最近一个后台命令的进程编号
ENV
一旦引用,则用于交互式的shell中
HOME
根目录,root用户的根目录是/root
IFS
字段分隔器,相当于(tab)键
LANG
当前locale的默认名称
LC_ALL
当前locale的名称
LC_COLLATE
用来排序字符的当前locale名称
LC_MESSAGES
输出信息的当前语言的名称
LINENO
刚执行过的行在脚本或函数内的行编号
NLSPATH
输出信息的当前语言的目录位置
PATH
命令查找路径
PPID
父进程的进程编号
PS1
主要的命令提示字符串,默认是“$”,root特权下是“#”
PS2
行继续提示字符串“>”
PS4
以set -x设置执行的跟踪的字符串,默认是“+”,一般是用sh -x *.sh测试跟踪脚本时用
PWD
当前工作目录

如果不太明白上面的变量是什么可以echo看下

[[email protected] data]# echo $PWD
/data
[[email protected] data]# ps -ef|grep `echo $$`
root     16174 16172  0 00:37 pts/1    00:00:00 -bash
root     22598 16174  0 13:37 pts/1    00:00:00 ps -ef
root     22599 16174  0 13:37 pts/1    00:00:00 grep 16174

而在POSIX中通用的结束状态有6种:


意义
0
命令成功退出
>0
在重定向或者是变量、命令等展开期间失败
1-125
命令不成功退出
126
命令找到但是文件无法执行
127
命令找不到
>128
命令因收到信号而死亡

这里就简单的举个例子:

[[email protected] test]# ls
test1
[[email protected] test]# ls -l test1 
-rw-r--r-- 1 root root 0 09-16 13:51 test1
[[email protected] test]# echo $?
0
[[email protected] test]# ls -l test2
ls: test2: 没有那个文件或目录
[[email protected] test]# echo $?    
2

而test表达式就比较重要的,平时写script时大量的if判断都会使用到

运算符
如果······则为真
string
string不是null
-b file
file是块设备文件
-c file
file是字符设备文件
-d file
file是目录
-e file
file存在
-f file
file为一般文件
-g file
file有设置setgid位
-h file
file是一符号连接
-L file
同上
-n string
string是非null
-p file
file是FIFO文件
-r file
file是可读的
-S file
file是socket
-s file
file不是空
-t n
文件描述符n指向一终端
-u file
file有设置setuid位
-w file
file是可写入的
-x file
file是可执行的
-z string
string为null
s1 = s2
字符串s1与s2相同
s1 != s2
字符串s1与s2不相同
n1 -eq n2
整数n1等于整数n2
n1 -ne n2
整数n1不等于整数n2
n1 -lt n2
n1小于n2
n1 -gt n2
n1大于n2
n1 -le n2
n1小于等于n2
n1 -ge n2
n1大于等于n2


本文出自 “技术随笔” 博客,谢绝转载!

以上是关于POSIX中shell下的常用变量结束状态和test表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell脚本中声明和使用布尔变量? POSIX

命令替换中的 POSIX shell 注释

linux基础:shell中的sh与bash区别与常用命令

在 Posix 中将 Shell 上下文变量传递给编译语言 (Java/C/C++)

shell三剑客之awk

shell的退出状态码