shell脚本编程练习
1.使用case..in实现等级判断,输入一个成绩,判断等级
90-100A 70-89B 0-69C
#!/bin/bash
read -p "请输入学生成绩:" a
case $a in
9[0-9])
echo 等级为A
;;
[7-8][0-9])
echo 等级为B
;;
[0-6][0-9])
echo 等级为C
;;
esac
运行结果:
2.任意输入一个数,使用while循环计算各个位数字之和
1234---->10
#!/bin/bash
read -p "请输入一个数:" a
while [ $((a%10)) -ne 0 ]
do
((sum+=a%10))
a=$((a/10))
done
echo 各位和为$sum
运行结果:
3.输入一个字符串,使用while循环实现字符串逆置
hello---->olleh
#!/bin/bash
read -p "请输入字符串:" a
str=$a
len=${#str}
i=0
b=
while [ $i -le $len ]
do
((i++))
b=$b${str:0-i:1}
done
echo $b
运行结果:
4.4.循环家目录下的所有内容,计算家目录下目录的个数,普通文件的个数,使用for循环
#!/bin/bash
a=0
b=0
for item in ~/*
do
if [ -d "$item" ]
then
((a++))
elif [ -f "$item" ]
then
((b++))
fi
done
echo 目录个数为:$a
echo 普通文件个数为:$b
运行结果:
5.打印图形
*
***
*****
*******
#!/bin/bash
for((i=1;i<4;i++))
do
for((j=0;j<=4-i;j++))
do
echo -n " "
done
for((k=0;k<2*i-1;k++))
do
echo -n "*"
done
echo
done
运行结果:
6.输入一个数组,请实现冒泡排序,插入排序
#!/bin/bash
read -p "请输入一个数组:" -a arr
n=${#arr[@]}
temp=0
for((i=0;i<n-1;i++))
do
for((j=0;j<n-i-1;j++))
do
if [ ${arr[j]} -gt ${arr[j+1]} ]
then
temp=${arr[j]}
arr[j]=${arr[j+1]}
arr[j+1]=$temp
fi
done
done
echo "冒泡排序结果: ${arr[@]}"
read -p "请输入一个数组:" -a arr1
insert_arr=("${arr1[@]}")
n=${#insert_arr[@]}
for ((i=1; i<n; i++))
do
key=${insert_arr[i]}
j=$((i-1))
while ((j >= 0 && insert_arr[j] > key))
do
insert_arr[j+1]=${insert_arr[j]}
((j--))
done
insert_arr[j+1]=$key
done
echo "插入排序结果: ${insert_arr[@]}"
运行结果:
7.输入用户名和密码(加密输入),实现密码的三次登录 默认用户名admin 密码1234 账户存款10000
如果登录失败,则提示
第1次登录失败,还有2次机会
第2次登录失败,还有1次机会
第3次登录失败,账户被锁定
如果登录成功,则显示银行页面
1.账户余额
2.取款
3.存款
如果选择1,则打印当前的余额
如果选择2,则输入取款金额,如果取款金额大于实际金额,则提示账户余额不足,请重新输入,如果账户余额小于等于实际金额,则提示取款成功,打印剩余金额
如果选择3,则输入存款金额,并提示 存款成功,余额的值
#!/bin/bash
set_user=admin
set_password=1234
balance=10000
for((i=1;i<=3;i++))
do
read -p "请输入用户名:" username
read -p "请输入密码:" password
echo
if [ "$username" == "$set_user" ] && [ "$password" == "$set_password" ]
then
echo 登陆成功
break
else
if [ $i -eq 3 ]
then
echo 账户被锁定
else
echo 第$i次登录失败,还有$((3-i))次机会
fi
fi
done
while true; do
echo -e "\n======================="
echo "1. 账户余额"
echo "2. 取款"
echo "3. 存款"
echo "======================="
read -p "请选择操作: " choice
case $choice in
1)
echo "当前余额: ${balance}元"
;;
2)
while true; do
read -p "请输入取款金额: " amount
# 验证数字格式且大于0
if [[ ! $amount =~ ^[0-9]+$ || $amount -le 0 ]]; then
echo "输入错误:必须为正整数"
elif (( amount > balance )); then
echo "余额不足,当前余额: ${balance}元"
else
(( balance -= amount ))
echo "取款成功!剩余金额: ${balance}元"
break
fi
done
;;
3)
while true; do
read -p "请输入存款金额: " amount
# 验证数字格式且大于0
if [[ ! $amount =~ ^[0-9]+$ || $amount -le 0 ]]; then
echo "输入错误:必须为正整数"
else
(( balance += amount ))
echo "存款成功!当前余额: ${balance}元"
break
fi
done
;;
*)
echo "无效选项,请重新输入"
;;
esac
done
运行结果: