跳到主要内容

第3章 Shell条件判断

第3章 条件判断

1.基于文件进行判断

1.1 参数说明

参数说明举例
-e如果文件或目录存在则为真-常用[ -e file ]
-s如果文件存在且至少有一个字符则为真[ -s file ]
-d如果文件存在且为目录则为真-常用[ -d file ]
-f如果文件存在且为普通文件则为真-常用[ -s file ]
-r如果文件存在且可读则为真[ -r file ]
-w如果文件存在且可写则为真[ -w file ]
-x如果文件存在且可执行则为真[ -x file ]

2.2 语法

第一种写法

test -f /etc/passwd && echo "true" || echo "false"

第二种写法

[ -f /etc/passwdd ] && echo "true" || echo "false"

2.3 练习

[ -f /etc/passwd ] && echo "文件存在" || echo "文件不存在"
[ -e /etc/passwd ] && echo "文件存在" || echo "文件不存在"
[ -r /etc/passwd ] && echo "文件可读" || echo "文件不可读"
[ -w /etc/passwd ] && echo "文件可写" || echo "文件不可写"
[ -x /etc/passwd ] && echo "文件可执行" || echo "文件不可执行"

[ -s /dev/zero ] && echo "true"||echo "false"
[ -s /dev/null ] && echo "true"||echo "false"
[ -s /etc/passwd ] && echo "true"||echo "false"

[ -f /dev/zero ] && echo "true"||echo "false"
[ -f /dev/null ] && echo "true"||echo "false"
[ -f /etc/passwd ] && echo "true"||echo "false"

2.基于整数进行判断

2.1 参数说明

参数说明举例
-eq等于则条件为真 equal[ 1 -eq 10 ]
-ne不等于则条件为整 not equal[ 1 -ne 10 ]
-gt大于则条件为真 greater than[ 1 -gt 10 ]
-lt小于则条件为真 less than[ 1 -lt 10 ]
-ge大于等于则条件为真 greater equal[ 1 -ge 10 ]
-le小于等于则条件为真 less equal[ 1 -le 10 ]

2.2 举例

单个条件

#!/bin/bash
read -p "please input num1:" num1
read -p "please input num2:" num2

[ $num1 -eq $num2 ] && echo "-eq ok" || echo "-eq no"
[ $num1 -ne $num2 ] && echo "-ne ok" || echo "-ne no"
[ $num1 -gt $num2 ] && echo "-gt ok" || echo "-gt no"
[ $num1 -lt $num2 ] && echo "-lt ok" || echo "-lt no"
[ $num1 -ge $num2 ] && echo "-ge ok" || echo "-ge no"
[ $num1 -le $num2 ] && echo "-le ok" || echo "-le no"

优化输出效果:

#!/bin/bash
source /etc/init.d/functions
read -p "please input num1:" num1
read -p "please input num2:" num2

[ $num1 -eq $num2 ] && action '-eq OK' /bin/true || action '-eq NO' /bin/false
[ $num1 -ne $num2 ] && action '-ne OK' /bin/true || action '-ne NO' /bin/false
[ $num1 -gt $num2 ] && action '-gt OK' /bin/true || action '-gt NO' /bin/false
[ $num1 -lt $num2 ] && action '-lt OK' /bin/true || action '-lt NO' /bin/false
[ $num1 -ge $num2 ] && action '-ge OK' /bin/true || action '-ge NO' /bin/false
[ $num1 -le $num2 ] && action '-le OK' /bin/true || action '-le NO' /bin/false

2.3 综合练习题

1.判断用户输入的是否为整数
2.判断用户输入的是否为包含特殊字符
3.判断用户输入的参数是否满足2个
4.判断用户输入的数字是否不超过4位
5.编写加判断的计算器

3.基于字符串进行判断

3.1 参数说明

参数说明举例
==等于则条件为真[ "$a" == "$b" ]
!=不等于则条件为真[ "$a" != "$b" ]
-z字符串内容为空则为真[ -z "$a" ]
-n字符串内容不为空则为真[ -n "$a" ]

3.2 举例

[ 10 == 10 ] && echo "==" || "><"
[ 10 != 5 ] && echo "==" || "><"
name=123
[ -z "$name" ] && echo "true"||echo "false"
[ -n "$name" ] && echo "true"||echo "false"

4.多个条件的判断

4.1 参数说明

参数说明举例
-a左右两边的条件同时为真才为真[ 1 -eq 1 -a 2 -gt 1 ]
-o左右两边的条件有一个为真则为真[ 1 -eq 1 -o 2 -gt 2 ]

4.2 举例

[ 1 -eq 1 -a 2 -gt 1 ] && action OK /bin/true || action NO /bin/false
[ 1 -eq 1 -o 2 -gt 2 ] && action OK /bin/true || action NO /bin/false

更新: 2024-06-03 20:27:09