Shell中各种判断语法与常用变量
一、常用变量
1、系统变量
$0:当前脚本的名称 $n:当前脚本的第n个参数,n=1.2.3..9 $*:当前脚本的所有参数 $#:当前脚本的参数个数 $?:命令或者程序执行完后的状态,返回0表示执行成功 $$:程序本身的PID号
2、环境变量
PATH:命令所示路径,以冒号为分割
HOME:打印架目录
SHELL:显示当前shell类型
USER:打印当前用户名
ID:打印当前用户ID信息
PWD:显示当前所在路径
HOSTNAME:显示当前主机名
二、Shell中各种判断语法
1、按照文件类型进行判断
-b 判断文件是否存在,并且是否为快设备文件(是块设备文件为真) -c 判断文件是否存在,并且是否为字符设备文件(是字符设备文件为真) -d 判断文件是否存在,并且是否为目录文件(是目录为真) -e 判断文件是否存在,存在为真 -f 判断文件是否存在,并且是否为普通文件(存在为真) -L 判断文件是否存在,并且是否为符号链接文件(是符号链接文件为真) -p 判断文件是否存在,并且是否为管道文件(是管道文件为真) -s 判断文件是否存在,并且是否为空(非空为真) -S 判断文件是否存在,并且是否为套接字文件(是套接字文件为真)
2、按照文件权限进行判断
-r 判断文档是否有读权限 -w 判断是否有写权限 -x 判断是否可执行
3、两个文件之间的比较
文件1 -nt 文件2 判断文件1的修改时间是否比文件2的新(如果新为真) 文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧(如果旧为真) 文件1 -ef 文件2 判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一个文件,这个判断是判断硬链接的最好方法
4、两个整数之间的比较
-eq 判断两个数值是否相等 -ne 判断两个数值是否不相等 -gt 判断是否大于 -lt 判断是否小于 -ge 判断是否大于等于 -le 判断是否小于等于
5、字符串之间的判断
-z 判断字符串是否为空 -n 判断字符串是否为非空 字符串1 == 2 判断字符串1是否和字符串2相等 字符串1 != 2 判断字符串1是否和字符串2不相等
6、多重条件判断与其它
判断1 -a 判断2 逻辑与,判断1和判断2都成立,最终结果为真
或者使用 [判断1] && [判断2] 判断1 -o 判断2 逻辑或,判断1和判断2有一个成立,结果为真
或者使用 [判断1] || [判断2] !判断 逻辑非 使原始的判断式取反
[]和test 两者是一样的,在命令行里test expr和[ expr ]的效果相同
test中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式。
[[ ]] 这是内置在shell中的一个命令,它就比刚才说的test强大的多了
注意:使用[]和[[]]的时候不要吝啬空格,每一项两边都要有空格,[[ 1 == 2 ]]的结果为“假”,但[[ 1==2 ]]的结果为“真”!
7、if判断中符号的区别
if语句经常会使用()、(())、[]、[[]]、{}等括号,如下为几种括号简单区别对比: ( ) 用于多个命令组、命令替换、初始化数组 (( )) 整数扩展、运算符、重定义变量值,算术运算比较 [] bash 内部命令,[]与 test 是等同的,正则字符范围、引用数组元素编号,不支持+-*/数学运算符,逻辑测试使用-a、-o [[ ]] bash 程序语言的关键字,不是一个命令,[[ ]]结构比[ ]结构更加通用,不支持+-*/数学运算符,逻辑测试使用&&、|| {} 主要用于命令集合或者范围,例如 mkdir -p /data/202{0,1}/
判断1