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
时间: 2024-10-29 02:58:07

POSIX中shell下的常用变量、结束状态和test表达式的相关文章

POSIX中shell下的eval

在posix中shell环境下eval是用来取出字符串当参数选项来用的,效果和"`"是一样的,这在平时写大量引用比较复杂的脚本时十分有用.简单的用bash来说,平时使用的指令都是被分割成token来处理,那么如果是通过管道(|)或者是大量引用的时候,往往因为冗余的指令导致参数展开错误,那么就需要使用到eval,这里举一个简单的例子: #!/bin/bash args="ls -al" echo "args is :$args" eval $arg

shell下的常用命令

1.help  显示所有内置命令的列表,或某一个内置命令的用法 #help //查看所有内置命令 #help 内置命令 //查看内置命令使用方法 #help -s 内置命令 //显示内置命令的语法格式,非常好用哦! [[email protected] var]# help -s cd cd: cd [-L|-P] [dir] 2.echo 用来显示一行文字,默认会自动换行 [[email protected] ~]# echo www www -e 让字符串中的特殊字符起作用.例如: [[em

【转】Mac OS X 中 Zsh 下 PATH 环境变量的正确设置

在 Mac OS X 中使用 zsh,环境变量 PATH 一不小心就会变得很紊乱,表现为自己设置的路径总是被放到系统路径之后,部分路径还会有重复.这是我们不太了解 zsh 启动时加载文件的顺序和 Mac OS X 的 shell 类型导致的. zsh 启动过程中会依次读取以下文件: /etc/zshenv $ZDOTDIR/.zshenv($ZDOTDIR 未设置时默认为 $HOME) 如果是 login shell,读取 /etc/zprofile, $ZDOTDIR/.zprofile 如果

【转】关于python中带下划线的变量和函数 的意义

http://www.blogjava.net/lincode/archive/2011/02/02/343859.html 总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量 2.  前带两个_ ,后带两个_ 的变量:  标明是内置变量, 3.  大写加下划线的变量:  标明是 不会发生改变的全局变量 函数: 1. 前带_的变量: 标明是一个私有函数, 只用于标明, 2.  前带两个_ ,后带两个_ 的函数:  标明是特殊函数 Pytho

python中带下划线的变量和函数的意义

表示私有属性,只能在自己的实例方法里面访问. self.__name会被编译成self._Bar__name以达到“不被外部访问”的效果 示例如下: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量 2.  前带两个_ ,后带两个_ 的变量:  标明是内置变量, 3.  大写加下划线的变量:  标明是 不会发生改变的全局变量 函数: 1. 前带_的变量: 标明是一个私有函数, 只用于标明, 2.  前带两个_ ,后带两个_ 的函数:  标明是特殊

python中带有下划线的变量和函数

一.变量 常量:大写加下划线 USER_CONSTANT 对于不会发生改变的全局变量,使用大写加下划线. 私有变量:小写和一个前导下划线 _private_value python中不存在私有变量一说,若是遇到需要保护的变量,使用小写和一个前导下划线.但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它.但实际上,外部类还是可以访问到这个变量. 内置变量:小写,两个前导下划线和两个后置下划线 __class__ 两个前导下划线会导致变量在解释期间被更名.这是为了避免内置

linux中shell变量$#,[email protected],$0,$1,$2的含义解释

摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linux中shell变量$#,[email protected],$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起来的情况.以&qu

inux中shell变量$#,[email protected],$0,$1,$2的含义

转自:http://www.cnblogs.com/fhefh/archive/2011/04/15/2017613.html linux中shell变量$#,[email protected],$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起来的情况.以

linux SHELL下替代sed、ask的常用字符串处理(截取,判断、替换)

在学过sed.awk这类功能强大的文本流处理命令后,面对简单字符串处理,往往会忘记一种更高效简洁的方法,它就是SHELL内置的字符串处理. 1.字符串的判断与赋值. 表达式 含义 ${var} 变量var的值,,我们常用的$var就是它的缩写 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * ${var=DEFAULT} 如果var没有被声明,