shell if语句:
if 表达式:
if 条件
then
command
else
command
fi
另一种写法:
shell 的 if 与 C 语言 if 的区别:
【if xx then】 shell then是xx执行结果为0执行,c是执行结果不为0执行
【if [i -ne 0]】【if (i)】 整数为0判断,shell与c
【if [ str ]】【if (strlen == NULL || strlen(str) == 0)】字符串为空判断,shell与c
if特性:
if支持多条command以及函数执行的返回值判断
if command == command+if $? ------- if [ $? -eq 0 ]
if的条件表达式:
文件:
if [ -f file ] 文件存在判断
if [ -d ... ] 目录存在判断
if [ -s file ] 文件存在且不为空判断
if [ -r file ] 文件存在可读判断
if [ -w file ] 文件存在可写判断
if [ -x file ] 文件存在可执行判断
整数:
if [ a -eq b ] a==b判断
if [ a -ne b ] a!=b判断
if [ a -ge b ] a>=b判断
if [ a -gt b ] a>b判断
if [ a -le b ] a<=b判断
if [ a -lt b ] a<b判断
字符串:
if [ $a = $b ] 字符串a等于字符串b
if [ $a != $b ] 字符串a不等于字符串b
if [ -n $a ] 字符串a非空
if [ -z $a ] 字符串a为空
if [ $a ] 字符串a非空
表达式需要带$符号
-eq -ne -ge -gt -le -lt 只能用于整数
=用于等于判断时需要两边加空格
shell没有<或者>,只有-eq -ge -le -ht -lt
逻辑非!,逻辑与 -a,逻辑或 -o
shell if的简单语法。
shell if 简单格式
shell if有下面几种用法:
if condition;
then
commands;
fi
if condition;
then
commands;
elif condition;
then
commands
else
commands
fi
[condition] && action; # 如果condition为真,则执行action
[condition] || action; # 如果condition为假,则执行action
条件
算术比较
-eq,-lt,-ge,-le
文件测试
-f,-x,-d,-e,-c,-b,-w, -r,-l
>, <, -z, -n
shell中条件判断if语句参数:
shell
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1在FILE2之前被修改, 或者如果 FILE1存在但是FILE2不存在则为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。 [ -z STRING ] “STRING” 的长度为零则为真。
[ -n STRING ] or [ STRING ] “STRING” 的长度为非零则为真。
[ STRING1 == STRING2 ] 如果2个字符串相同
[ STRING1 != STRING2 ] 如果字符串不相等则为真。
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面,则为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在 “STRING2”后,则为真。
[ ARG1 OP ARG2 ] “OP”可以为-eq, -ne, -lt, -le, -gt or -ge.