网站数据库分离怎么做,flashfxp发布网站,美食网站建设策划方案,网站聊天室怎样做炫彩马甲1 if 分支语句
在 Shell 脚本应用中#xff0c;if 语句是最为常用的一种流程控制方式#xff0c;用来根据特定的条件测试结果#xff0c;分别执行不同的操作。
根据不同的复杂程度#xff0c;if 语句的选择结构可以分为三种基本类型#xff0c;适用于不同的应用场合#…1 if 分支语句
在 Shell 脚本应用中if 语句是最为常用的一种流程控制方式用来根据特定的条件测试结果分别执行不同的操作。
根据不同的复杂程度if 语句的选择结构可以分为三种基本类型适用于不同的应用场合单分支 if 语句
双分支 if 语句
多分支 if 语句1.1 单分支if语句
对于单分支的选择结构只有在“条件成立”时才会执行相应的代码否则不执行任何操作。
语法if 条件测试语句
then
命令序列
fi条件测试语句既可以是“[条件表达式]”语句也可以是其他可执行的命令语句。
命令序列指的是一条或多条可执行的命令行也包括嵌套使用的 if 语句或其他流程控制语句。
单分支 if 语句的执行流程首先判断条件测试操作的结果如果返回值为 0表示条件成立执行 then 后面的命令序列一直到遇见 fi 结束判断为止继续执行其他脚本代码。
如果返回值不为 0则忽略 then 后面的命令序列直接跳至 fi 行以后执行其他脚本代码。示例1
#!/bin/bash
read -p 请输入一个数字 num
if [ $num -gt 5 ]
thenecho $num 大于 5
fi# 也可以写成
if [ $num -gt 5 ];then echo $num 大于 5;fi
# 或者
[ $num -gt 5 ] echo $num 大于 5示例2
if [ $USER ! root ]
thenecho 当前用户不是root用户权限不足exit 3
fi
lsexit命令表示退出脚本不再执行其它代码
3表示退出后的返回状态值1.2 双分支if语句
对于双分支的选择结构要求针对“条件成立”“条件不成立”两种情况分别执行不同的操作。
语法if 条件测试语句
then
命令序列1
else
命令序列2
fi双分支 if 语句的执行流程首先判断条件测试语句的结果如果条件成立则执行then后面的命令序列 1忽略 else 及后面的命令序列 2直到遇见 fi 结束判断。
如果条件不成立则忽略 then 及后面的命令序列 1直接跳至 else 后面的命令序列 2 并执行直到遇见 fi 结束判断。示例
#!/bin/bash
read -p 请输入一个数字num1 num1
read -p 请输入一个数字num2 num2
if [ $num1 -lt $num2 ]
thenecho $num1 $num2
elseecho $num2 $num1
fi# 通过位置参数 $1 提供目标主机地址
ping $1 -c 4 -i 0.2 /dev/null
if [ $? -eq 0 ]
thenecho $host连接成功
elseecho $host连接失败
fi-c 和 -i分别表示发送测试包的个数和时间间隔
/dev/null将ping执行过程中的输出信息丢弃1.3 多分支if语句
语法if 条件测试语句1
then
命令序列1
elif 条件测试语句2 # 可以有n个
then
命令序列2
else
命令序列2
fi多分支 if 语句的执行流程首先判断条件测试语句 1 的结果如果条件 1 成立则执行命令序列 1然后跳至 fi 结束判断。
如果条件 1 不成立则继续判断条件测试语句 2 的结果如果条件 2 成立则执行命令序列 2然后跳至 fi结束判断…
如果所有的条件都不满足则执行 else 后面的命令序列n直到遇见 fi 结束判断。示例
#!/bin/bash
read -p 请输入成绩 source
if [ $source -ge 0 ] [ $source -lt 60 ]
thenecho 成绩不合格
elif [ $source -ge 60 ] [ $source -lt 75 ]
thenecho 成绩合格
elif [ $source -ge 75 ] [ $source -lt 90 ]
thenecho 成绩良好
elif [ $source -ge 90 ] [ $source -lt 100 ]
thenecho 成绩优秀
elif [ $source -eq 100 ]
thenecho 满分
elseecho 输入错误
fi2 case分支语句
针对变量额不同取值分别执行不同的命令序列这种情况与多分支的if语句非常相似只不过if语句需要判断多个不同的条件而case语句只是判断一个变量的不同取值。
语法
case 变量值 in模式1)命令序列1;;模式2)命令序列2;;......*)默认命令序列;;
esac变量值即$变量名
*作为通配符可匹配任意值case 语句的执行流程首先使用“变量值”与模式 1 进行比较若取值相同则执行模式 1后的命令序列直到遇见双分号“;;”后跳转至esac表示结束分支。
若与模式 1 不相匹配则继续与模式 2 进行比较若取值相同则执行模式 2 后的命令序列直到遇见双分号“;;”后跳转至 esac表示结束分支……依此类推。
若找不到任何匹配的值则执行默认模式“*)” 后的命令序列直到遇见 esac 后结束分支。注意双分号“;;”表示命令序列的结束。
模式字符串中可以用方括号表示一个连续的范围如“[0-9]”还可以用“|”表示或如“A|B”。示例
#!/bin/bash
read -p 请输入月份 month
case $month in1|3|5|[7-8]|10|12)echo $month月有31天;;2)read -p 请输入年份 yearif [ $(echo $year%4|bc) -eq 0 ] [ $(echo $year%100|bc) -ne 0 ] || [ $(echo $year%400|bc) -eq 0 ]thenecho $year年的$month月有29天elseecho $year年的$month月有28天fi;;4|6|9|11)echo $month月有30天;;*)echo 月份输入错误
esac