题目:

  一条公交路线共30站,乘客上车需支付1元,之后每超过5站支付0.5元;最好可以实现“余额不足的提醒”和“逃票,漏刷卡的显示”。

  注意:需下载bc计算器

第一种方法(重复语句太多):

 1 #!/bin/bash
2 read -p "请输入您的公交卡金额:" money
3 if [ -z "$money" ] || [ "$money" -lt 1 ];then
4 echo "您的余额不足,请尽快充值!"
5 exit
6 else
7 read -p "请输入您的上车站号:" on
8 if [ -z "$on" ];then
9 echo "您有未刷卡记录"
10 elif [ "$on" -gt 30 ] || [ "$on" -le 0 ];then
11 echo "请输入正确的车站号!"
12 exit
13 fi
14 read -p "请输入您的下车站号:" off
15 if [ -z "$off" ];then
16 echo "您有未刷卡记录"
17 elif [ "$off" -le 0 ] || [ "$off" -gt 30 ];then
18 echo "请输入正确的车站号!"
19 exit
20 fi
21 if [ -z "$on" ] && [ -z "$off" ];then
22 echo "您已逃票一次,下次请自觉刷卡"
23 exit
24 elif [ -z "$on" ] || [ -z "$off" ];then
25 spe=3.5
26 bal=`echo "$money-$spe" |bc`
27 echo "您上车或者下车有未刷卡记录,将会扣除您全程车费$spe元,你的余额还剩$bal元!"
28 exit
29 fi
30 beg=1
31 if [ "$on" -le "$off" ];then
32 dif=`echo "$off-$on" |bc`
33 else
34 dif=`echo "$on-$off" |bc`
35 fi
36 if [ "$dif" -le "5" ];then
37 spe="$beg"
38 bal=`echo "$money-$spe" |bc`
39 echo "您共坐了"$dif"站;花费了"$spe"元;您的余额还有"$bal"元"
40 elif [ "$dif" -gt 5 ] && [ "$dif" -le 10 ];then
41 spe=`echo "scale=1;$beg+0.5" |bc`
42 bal=`echo "$money-$spe" |bc`
43 echo "您共坐了"$dif"站;花费了"$spe"元;您的余额还有"$bal"元"
44 echo "$bal"
45 elif [ "$dif" -gt 10 ] && [ "$dif" -le 15 ];then
46 spe=`echo "scale=1;$beg+1" |bc`
47 bal=`echo "$money-$spe" |bc`
48 echo "您共坐了"$dif"站;花费了"$spe"元;您的余额还有"$bal"元"
49 elif [ "$dif" -gt 15 ] && [ "$dif" -le 20 ];then
50 spe=`echo "scale=1;$beg+1.5" |bc`
51 bal=`echo "$money-$spe" |bc`
52 echo "您共坐了"$dif"站;花费了"$spe"元;您的余额还有"$bal"元"
53 elif [ "$dif" -gt 20 ] && [ "$dif" -le 25 ];then
54 spe=`echo "scale=1;$beg+2" |bc`
55 bal=`echo "$money-$spe" |bc`
56 echo "您共坐了"$dif"站;花费了"$spe"元;您的余额还有"$bal"元"
57 else
58 spe=`echo "scale=1;$beg+2.5" |bc`
59 bal=`echo "$money-$spe" |bc`
60 echo "您共坐了"$dif"站;花费了"$spe"元;您的余额还有"$bal"元"
61 fi
62 fi

第二种方法(简化计算过程):

 1 #!/bin/bash
2 #公交卡金额
3 read -p "请输入您的公交卡金额:" MON
4 #判断公交卡里是否金额足够
5 if [ -z $MON ] || [ $MON -lt 1 ];then
6 echo "您的公交卡余额不足,请尽快充值!"
7 exit
8 fi
9 #上下车站号
10 read -p "请输入您的上车车站号:" GON
11 read -p "请输入您的下车车站号:" GOF
12 #判断是否有逃票
13 if [ -z $GON ] && [ -z $GOF ];then
14 echo "您已经有逃票记录了,请注意你的信用值!"
15 exit
16 elif [ -z $GON ] || [ -z $GOF ];then
17 BAL=`echo "$MON-3.5" |bc`
18 echo "您有漏刷卡记录,将扣除您全程车票,您的公交卡余额还剩$BAL元!"
19 exit
20 fi
21 NUM=`echo "$GOF-$GON" |bc`
22 COS=`echo "($NUM-1)/5*0.5+1" |bc`
23 BAL=`echo "$MON-$COS" |bc`
24 echo "您一共乘坐了$NUM站,花费了$COS元,您的公交卡还剩$BAL元!"

shell基础之bus实战(if 练习)的更多相关文章

  1. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  2. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  3. Shell基础学习小结

    0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...

  4. Shell基础-环境变量配置文件

    Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...

  5. shell基础二十篇 一些笔记

    shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...

  6. shell基础(转)

    shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...

  7. shell基础及变量

    一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...

  8. Shell 基础教程

    一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html

  9. Linux基础学习(10)--Shell基础

    第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...

随机推荐

  1. 【Java】7.0 进制转换

    [二进制转十进制] public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.p ...

  2. 2020-BUAA OO-面向对象设计与构造-HW11中对ageVar采用缓存优化的等价性证明(包括溢出情况)

    HW11中对ageVar采用缓存优化的等价性证明(包括溢出情况) 概要 我们知道,第三次作业里age上限变为2000,而如果缓存年龄的平方和,2000*2000*800 > 2147483647 ...

  3. lms微服务框架主机介绍

    目录 概念 .net的通用主机 .net的web主机 lms的业务主机类型 用于托管业务应用的普通主机 1. 创建一个应用台程序 2. 安装Silky.Lms.NormHost包 3. 注册LMS服务 ...

  4. 关于ArrayList 中子方法 -- contains 疑惑解决

    写之前先看下 ArrayList 子函数 contains 的Api 怎么介绍: boolean contains(Object o)           如果此列表中包含指定的元素,则返回 true ...

  5. Python的文本和字节序列

    一.字符串的表示和存储 字符串是字符的序列,每个字符都有有一个数字作为标识,同时会有一个将标识转换为存储字节的编码方案: s = 'hello world python' for c in s: pr ...

  6. aws 通过eksctl 创建eks

    主要需要参考: https://eksctl.io/ https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/getting-started-ek ...

  7. OpenCV 之 空间刚体变换

    刚体就是 "刚性物体",它在运动过程中,内部各质点间的相对位置不会改变,也即 每两个质点间的距离 保持不变 假设刚体内任意两个质点,坐标分别为 $(x_1, y_1, z_1)$ ...

  8. 『政善治』Postman工具 — 3、补充:restful风格接口的项目说明

    目录 (一)RESTful架构风格特点 1.统一接口风格 2.规范的HTTP请求方法 3.HTTP响应码 4.什么是无状态 (二)JSON数据格式说明 1.什么是JSON 2.JSON格式的特点 3. ...

  9. 我为Dexposed续一秒——论ART上运行时 Method AOP实现

    转载于:http://weishu.me/2017/11/23/dexposed-on-art/ 两年前阿里开源了 Dexposed 项目,它能够在Dalvik上无侵入地实现运行时方法拦截,正如其介绍 ...

  10. 使用BurpSuite抓取HTTPS网站的数据包

    昨天面试,技术官问到了我如何使用BurpSuite抓取https网站的数据包,一时间没能回答上来(尴尬!).因为以前https网站的数据包我都是用Fiddler抓取的,Fiddlert自动帮我们配置好 ...