shell_编程条件if语句
条件语句
- 一.条件测试
- test命令
- 2.文件测试
- 3.指数值比较
- 4.字符串比较
- 格式:
- 5.逻辑测试
- 常用的操作符:
- 格式:
- 二.if语句
- 1.单分支结构
- 2.双分支 if 语句
- 3.多分支结构
- 4.case分支语句
一.条件测试
1. test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
2.文件测试
表达式:
[ 操作符 文件或目录 ]
- 常用测试操作符
-d | 测试是否为目录 |
---|---|
-e | 测试目录或文件是否存在 |
-f | 测试是否为文件 |
-r | 测试是否有读取权限 |
-w | 测试当前用户是否有写入权限 |
-x | 测试当前用户是否有权限执行 |
3.指数值比较
用于比较两个整数值的大小
格式:[ 整数变量1 操作符 整数变量2 ]
常用的测试操作符:
-eq | 等于 |
---|---|
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
-le | 小于等于 |
-ge | 大于等于 |
4.字符串比较
- 字符串可用来查看用户输入、系统环境等是否满足条件
- 交互式操作的shell脚本中,用来判断用户输入的位置参数是否符合要求
格式:
- 格式1:
[ 字符串1 = 字符串2 ] 或 [ 字符串1 == 字符串2 ]
[ 字符串1 != 字符串2 ] -----不等于
- 格式2:
[ -z 字符串 ] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串**
[ -n 字符串 ] ### 检查是否有字符串
=: | 字符串内容相同 |
---|---|
!=: | !表示相反的意思,表示不相同 |
-z | 字符串内容为空 |
-n | 检查是否有字符串 |
5.逻辑测试
用于判断两个或多个条件之间的依赖关系
常用的操作符:
-a或&& :逻辑与,“而且”的意思,前后条件需都成立
-o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立
! :逻辑否,“不”的意思
格式:
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
[root@localhost ~]# a=5
[root@localhost ~]# echo $a
5
[root@localhost ~]# [ $a -ne 1 -a $a != 2 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -ne 1 -o $a != 2 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -ne 1 -o $a = 2 ]
[root@localhost ~]# echo $?
0
二.if语句
1.单分支结构
- if条件测试:
条件成立:执行then后面的语句
条件不成立:结束判断
格式:
if 条件测试操作
then
命令序列
fi
3种表达式方法:
2.双分支 if 语句
针对两种情况执行不同的操作
格式:
if 条件测试操作
then
命令序列 1
else
命令序列 2
fi
3.多分支结构
针对if的特性,嵌套使用,进行多次判断。
格式:
if 条件测试操作 1
then
命令序列 1
elif 条件测试操作 2
then
命令序列 2
[else]
[命令序列 3]
fi
例题:
分数为80-100直接为优秀
分数为70-84之间为合格
其他为不合格
#!/bin/bash
read -p "请输入你的分数:" score
if [ $score -ge 85 -a $score -le 100 ]
then
echo "你的分数为: ${score} ,优秀"
elif [ $score -ge 70 -a $score -le 84 ]
then
echo "你的分数为:${score},合格"
elif [ $score -lt 70 -a $score -ge 0 ]
then
echo "你的分数为:${score},不合格"
else
echo "输入有误,请重新输入!"
fi
例题:
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其他字符则提示重新输入,并判断男女性别,男生进入男生组,女生进入女生组,输入错误则提示错误。
#!/bin/bash
read -p "请输入你的秒数" a
if [ $a -gt 0 -a $a -le 10 ]
then
echo "你的秒数为:${a},进入选拔"
read -p "输入性别:男/女" b
if [ $b = 男 ]
then
echo "进入男生组"
elif [ $b = 女 ]
then
echo "进入女生组"
else
echo "重新输入"
fi
elif [ $a -gt 10 ]
then
echo "你的秒数为:${a},淘汰"
else
echo "请重新输入"
fi
4.case分支语句
用于变量存在多种取值,对每种取值执行不同的命令
与if相似,
格式:
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esac
①case行首必须以单词“in”,每一模式必须以单个右括号”)”结束
②双分号”;;”表示命令序列的结束
③模式字符串中,可以用方括号表示一个连续的范围,如”[0-9]“;还可以使用竖杠|表示或,比如a|b
最后的*)表示默认模式,其中的*相当于通配符
例题:
分数为85-100直接为优秀
分数为70-84之间为合格
0-69为不合格
其余判断请重新输入
还没有评论,来说两句吧...