if -then结构 - if -then
语句的基本格式如下: if [ 条件判断式 ];then 程序 fi
或者: if [ 条件判断式 ] then 程序 fi
- 注意事项: * Shell中的if语句使用fi结尾,不同于一般语句的大括号结尾; * [ 条件判断式 ]
就是使用test命令判断,所以[
、]
和条件判断式之间必须有空格; * then
后面跟符合条件执行的程序,可以放在[]
之后,用;
分割,也可以换行写入,不需要;
分割。
例一:
#if -then结构使用
#!/bin/bash
echo 判断3是否小于5
if [ 3 -le 5 ]
then
echo 3小于5
fi
echo
echo 判断5是否小于3
if [ 5 -le 3 ]
then
echo 5小于3
fi
copy
赋予可执行权限后执行脚本,结果如下:
例二:
test=$(env | grep "USER" | cut -d "=" -f2)
echo $test
if [ "$test" == ybcarry ]
then
echo "Current user is root."
fi
copy
赋予可执行权限后执行脚本,结果如下:
例三: 查看自己系统根分区的分区号:
rate=$(df -h | grep "/dev/sda1" | awk '{print $5}' | cut -d "%" -f1)
echo $rate
if [ $rate -ge 80 ]
then
echo "Warning! /dev/sda1 is full!!!"
fi
copy
赋予可执行权限后执行脚本,结果如下:
if -then -else结构 - if -then -else
语句的基本格式如下: if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立时,执行的程序 fi
例四:
echo 判断3是否小于5
if [ 3 -le 5 ]
then
echo 3小于5
else
echo 3大于5
fi
echo
echo 判断5是否小于3
if [ 5 -le 3 ]
then
echo 5小于3
else
echo 5大于3
fi
copy
赋予可执行权限后执行脚本,结果如下:
if [ 条件判断式1 ]
then
if [ 条件判断式2 ]
then
程序1
fi
程序2
fi
copy
例一:
echo 判断3和5的关系
if [ 3 -le 5 ]
then
if [ 3 -eq 5 ]
then
echo 3等于5
fi
if [ 3 -ge 5 ]
then
echo 3大于5
fi
echo 3小于5
fi
copy
赋予可执行权限后执行脚本,结果如下:
if [ 条件判断式1 ]
then
程序1
elif [ 条件判断式2 ]
then
程序2
else
程序3
fi
copy
例二:
#if -elif - else嵌套结构使用
#!/bin/bash
echo 判断3和5的关系
if [ 3 -le 5 ]
then
echo 3小于5
elif [ 3 -eq 5 ]
then
echo 3等于5
else
echo 3大于5
fi
copy
赋予可执行权限后执行脚本,结果如下:
例三:
下面用所学内容来写一个简易计算器:
设计思路:
a.有没有输入内容
b.判断输入的是否为数字
c.判断输入的运算符
d.执行运算操作
copy
先自己思考,参考代码如下:
#字符界面加减乘除计算器
#!/bin/bash
#通过read命令接收要计算的数值,赋予变量num1和num2
read -t 30 -p "Please input num1: " num1
read -t 30 -p "Please input num2: " num2
#通过read命令接收运算符,赋予变量op
read -t 30 -p "Please input operator: " op
#判断num1、num2和op不为空
if [ -n "$num1" -a -n "$num2" -a -n "$op" ]
then
#定义test1和test2,把test1的值置为空,如果替换成功,证明num1为数值,test2也如此
test1=$(echo $nm1 | sed 's/[0-9]//g')
test2=$(echo $nm2 | sed 's/[0-9]//g')
#判断num1和num2是否为数值
if [ -z "$test1" -a -z "$test2" ]
then
#判断运算符
#加法运算
if [ "$op" == '+' ]
then
result=$(($num1 + $num2))
#减法运算
elif [ "$op" == '-' ]
then
result=$(($num1 - $num2))
#乘法运算
elif [ "$op" == '*' ]
then
result=$(($num1 * $num2))
#除法运算
elif [ "$op" == '/' ]
then
result=$(($num1 / $num2))
else#不匹配,输出提示,退出程序,返回错误代码10
echo "Please input a valid symbol !"
exit 10
fi
else#test1和test2不是数值,输出提示,退出程序,返回错误代码11
echo "Please input a valid value !"
exit 11
fi
else #test1和test2为空,输出提示,退出程序,返回错误代码12
echo "Please input a value !"
exit 12
fi
#输出结果
echo "$num1 $op $num2 = $result"
copy
赋予可执行权限后执行脚本,结果如下:
case 变量 in
值1)
程序1;;
值2)
程序2;;
...省略其他分支...
*)
程序3;;
esac
copy
例一:
#case结构的使用
#!/bin/bash
echo -n 输入一个正整数:
read num
case $num in
1)echo 输入的数值为1;;
2)echo 输入的数值为2;;
3)echo 输入的数值为3;;
4)echo 输入的数值为4;;
5)echo 输入的数值为5;;
*)echo 输入的数值大于5;;
esac
echo 结束
copy
赋予可执行权限后执行脚本,结果如下:
select 变量 in 变量列表
do
命令
done
copy
例一:
#select命令的使用
#!/bin/bash
select choose in C C++ C# Java Python Swift Shell Other
do
break
done
echo 你喜欢的是 $choose
copy
赋予可执行权限后执行脚本,结果如下:
select命令可以循环获取用户的输入,但是在第二次以后就不再显示菜单,因此一般不用select的循环特性。
copy
学习时间 128分钟
操作时间 111分钟
按键次数 4256次
实验次数 2次
报告字数 4795字
是否完成 完成