shell脚本的相关练习--->分支结构---->循环结构
一.使用case...in实现等级判断,输入成绩,判断等级
列如:90-100:A,70-89:B,0-69:C
#!/bin/bash
read -p"请输入成绩:" sorce
a=$((sorce/10))
case $a in
9|10)
echo A
;;
7|8)
echo B
;;
0|1|2|3|4|5|6)
echo C
;;
esac
二.完成任意输入一个数,使用while循环计算各个位数字之和
#!/bin/bash
2 read -p"请输入一个数:" num
3 while [ $num -ne 0 ]
4 do
5 a=$((num "%" 10))
6 sum=$((sum "+" a))
7 num=$((num "/" 10))
8 done
9 echo 各个数字之和为:$sum
运行结果为:
三.输入一个字符串,使用while循环实现字符串逆置
#!/bin/bash
read -p"请输入字符串:" str
len=${#str}
for((i=1;i<=len;i++))
do
echo -n "${str:0-$i:1}"
done
echo
运行结果:
四.循环家目录下的所有内容,计算家目录下 目录的个数,普通文件的个数,使用for循环
#!/bin/bash
arr=(`ls ~`)
len=${#arr[*]}
qt=0
for i in `seq 0 1 $(($len-1))`
do
if [ -d ~/${arr[$i]} ]
then
((qt++))
fi
done
echo 家目录下目录数量为$qt
qt=0
for i in `seq 0 1 $(($len-1))`
do
if [ -f ~/${arr[$i]} ]
then
((qt++))
fi
done
echo 家目录下普通文件数量为$qt
运行结果:
五.打印图形
*
***
*****
*******
#!/bin/bash
read -p"请输入打印层数:" num
for((i=1;i<=num;i++))
do
j=$((num-i))
for((l=0;l<j;l++))
do
echo -n " "
done
q=$((2*i-1))
for((k=0;k<q;k++))
do
echo -n "*"
done
echo
done
运行结果:
六.输入一个数组,请实现冒泡排序,插入排序
#!/bin/bash
read -p"请输入几组数据:" -a arr
#冒泡
for((i=1;i<${#arr[*]};i++))
do
for((j=0;j<${#arr[*]}-i;j++))
do
if [ ${arr[$j]} -ge ${arr[$((j+1))]} ]
then
t=${arr[$j]}
arr[j]=${arr[$((j+1))]}
arr[j+1]=$t
fi
done
done
echo ${arr[*]}
运行结果:
七.输入用户名和密码(加密输入),实现密码的三次登录 默认用户名admin 密码1234 账户存款10000
如果登录失败,则提示
第1次登录失败,还有2次机会
第2次登录失败,还有1次机会
第3次登录失败,账户被锁定
如果登录成功,则显示银行页面
1.账户余额
2.取款
3.存款
如果选择1,则打印当前的余额
如果选择2,则输入取款金额,如果取款金额大于实际金额,则提示账户余额不足,请重新输入,如果账户余额小于等于实际金额,则提示取款成功,打印剩余金额
如果选择3,则输入存款金额,并提示 存款成功,余额的值
#!/bin/bash
money=10000
for((i=1;i<=3;i++))
do
read -p"输入用户名:" admin
read -p"输入密码:" passwd
if [ $admin != "admin" ] || [ $passwd != "1234" ]
then
echo 第$i次登录失败,还有$((3-i))次机会
else
select choice in 存款余额 取款 存款
do
case $choice in
"存款余额")
echo $money
;;
"取款")
read -p"请输入取款金额:" a
if [ $a -gt $money ]
then
echo 账户余额不足,请重新输入
else
echo 提款成功,您的余额为:$((money-a))
fi
;;
"存款")
read -p"请输入存款金额:" b
echo 存款成功,您的余额为:$((b+money))
;;
*)
echo error
;;
esac
done
fi
done
运行结果: