3 条件判断
4 流程控制语句
1)if 语句
案例,用户输入用户名和密码,判断用户名是否是admin,密码是否是123,如果正确,则显示登录成功
首先我创建了shell文件,touch getpawer 其中getpawer 是我自己命的名
#!/bin/bash
read -p "请输入账号:" uname
n=$uname
read -p "请输入密码:" upwd
m=$upwd
if (("n"=="admin" && "m"=="123"))
then echo "登录成功"
else echo "登录失败"
fi
效果展示如下:
[root@localhost ~]# vi getpawer
[root@localhost ~]# sh getpawer
请输入账号:451
请输入密码:31031
登录失败
[root@localhost ~]# sh getpawer
请输入账号:admin
请输入密码:123
登录成功
[root@localhost ~]# admin
-bash: admin: command not found
[root@localhost ~]# sh getpawer
请输入账号:admin
请输入密码:321
登录失败
2)case语句:用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令
# 基础语法
case 变量 in
值 1)
语句1 ;;
值 2)
语句2 ;;
esac # 用于结束case语句,case反过来就是esac
案例,判断某个月份是多少天
#!/bin/bash
read -p "请输入要查询的月份:" month
echo "你要查询的月份是:$month月"
case $month in
1|3|4|7|8) echo "$month月有31天";;
4|6|9|11|12) echo "$month月有30天";;
2) echo "$month月有28天";;
esac
效果如下:
[root@localhost ~]# vi getday
[root@localhost ~]# sh getday
请输入要查询的月份:3
你要查询的月份是:3月
3月有31天
3)for循环
一个案例来了解语法,送出10次玫瑰花
#!/bin/bash
flowers=( "第1" "第2" "第3" "第4" "第5" "第6" "第7" "第8" "第9" "第10")
for n in ${flowers[*]}
do
echo "我喜欢你,这是我送你的第$n朵玫瑰花"
done
效果展示:
[root@localhost ~]# sh getflower
我喜欢你,这是我送你的第第1朵玫瑰花
我喜欢你,这是我送你的第第2朵玫瑰花
我喜欢你,这是我送你的第第3朵玫瑰花
我喜欢你,这是我送你的第第4朵玫瑰花
我喜欢你,这是我送你的第第5朵玫瑰花
我喜欢你,这是我送你的第第6朵玫瑰花
我喜欢你,这是我送你的第第7朵玫瑰花
我喜欢你,这是我送你的第第8朵玫瑰花
我喜欢你,这是我送你的第第9朵玫瑰花
我喜欢你,这是我送你的第第10朵玫瑰花
升级版:
#!/bin/bash
flowers=( "牡丹花" "玫瑰花" "桂花" "兰花" "梅花" "太阳花" "水仙花" "茉莉花" "小米花" "大红花")
sum=0
for i in ${flowers[*]} # 从数组中去出所有元素
do
sum=$(($sum+1)) echo "我喜欢你,送你的第$sum朵花是$i"
done
效果如下:
[root@localhost ~]# sh getflower1
我喜欢你,送你的第1朵花是牡丹花
我喜欢你,送你的第2朵花是玫瑰花
我喜欢你,送你的第3朵花是桂花
我喜欢你,送你的第4朵花是兰花
我喜欢你,送你的第5朵花是梅花
我喜欢你,送你的第6朵花是太阳花
我喜欢你,送你的第7朵花是水仙花
我喜欢你,送你的第8朵花是茉莉花
我喜欢你,送你的第9朵花是小米花
我喜欢你,送你的第10朵花是大红花
4)while 循环
语法:
while 循环条件
do
循环语句
done
案例:输出10次为梦想而战
#!/bin/bash
i=1 # 循环参数从1开始
while(($i<=10)) # 只有i<=10的时候程序才会向下执行
do
i=$(($i+1)) # 每执行一次i的值就加一,是为了当i=11时就停止,也就实现了循环10次
echo "为梦想而战!!!"
done
效果如下:
[root@localhost ~]# sh shell1
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
综合案例,用户输入自己的考试成绩,当成绩低于60,计算出距离60分的差距,并提示用户有2个选择,选择1是放弃,转专业,选择后弹出5句,别灰心,三百六十行行行出状元,当选择2时,是继续坚持备考下一次测试,并弹出5句,帅哥,你坚持的样子很酷,选择3时则提示,选择无效,请重新选择。当输入成绩大于60,则弹出,颁奖开始:第一个奖品本子是由蔡老师颁发,第二个本子是由王老师颁发…。
代码展示如下:
#!/bin/bash
read -p "请输入你的专业成绩:" grade
n=$grade
if (("$n"<"60"))
then
fs=$((60-$n))
echo "$fs"
echo "你的成绩是$n,离及格成绩60分还差$fs分"
echo "选择操作1:不再继续,我要转专业"
echo "选择操作2:我要继续战斗,下次考试一定及格"
read -p "请输入你的选择(1or2):" m
xz=$m
echo "你的选择是:$xz"
case $xz in
1) echo "你的选择是:不再继续,想要转专业,送你5句话"
i=1
while(($i<=5))
do
i=$(($i+1))
echo "别灰心,三百六十行,行行出状元"
done;;
2) echo "你的选择是:继续坚持备考下一次测试,送你5句话"
q=1
while(($q<=5))
do
q=$(($q+1))
echo "帅哥,你坚持的样子很酷!!!"
done;;
3) echo "选择无效,请重新选择"
esac
else
echo "专业成绩及格,现在由老师们给你颁发奖品:"
name=("蔡老师" "王老师" "刘老师" "李老师")
jiangli=("本子" "钢笔" "电脑" "鼠标")
lengh=${#name[@]}
for ((sum=1; sum <=$lengh ; sum++))
doecho "第$sum个奖励${jiangli[$sum-1]}是由${name[$sum-1]}颁发的"
done
fi
效果如下: