shell if语句简明例子教程

发布时间:2020-07-07编辑:脚本学堂
有关shell if语句的用法,if支持多条command以及函数执行的返回值判断,本文整理了一些shell if语句的例子,供大家学习参考。

shell if语句

if 表达式:
if 条件
then
command
else
command
fi

另一种写法:
 

[ -f "~/test.sh" ] && echo "test.sh is ecisted"


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.