题目:

  一条公交路线共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. Python写的微服务如何融入Spring Cloud体系?

    前言 在今天的文章中小码哥将会给大家分享一个目前工作中遇到的一个比较有趣的案例,就是如何将Python写的微服务融入到以Java技术栈为主的Spring Cloud微服务体系中?也许有朋友会有疑问,到 ...

  2. .NET HttpWebRequest(请求被中止: 未能创建 SSL/TLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决

    前言: 前段时间在对接第三方接口的时候发生了一个非常奇葩的问题,就是使用 .NET Framework 4.6 HttpWebRequest进行网络请求的相关问题.背景,关于调用第三方的接口都是使用使 ...

  3. 数据库MySQL六

    介绍什么是JDBC JAVA SE也有 提高综合篇 JDBC(Java Database Connectivity) :java和数据库的连接技术,sun公司推出的一套java应用程序访问数据库的技术 ...

  4. 【笔记】《Redis设计与实现》chapter10 RDB持久化

    chapter10 RDB持久化 10.1 RDB文件的创建和载入 有两个Redis命令可以用于生成RDB文件,SAVE和BGSAVE SAVE阻塞服务器进程进行RDB文件的创建,BGSAVE则创建服 ...

  5. VirtualBox虚拟机读取U盘

    1 概述 使用VirtualBox虚拟机(系统Win10)读取宿主机(系统Manjaro)中的U盘. 2 安装扩展 戳这里下载对应版本的一个叫Oracle_VM_VirtualBox_Extensio ...

  6. shell脚本 4 函数与正则

    shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式 func() {   #指定函数名 ...

  7. 1-3 Postman 注册账号与登录

    1.为什么要注册postman账号 注册postman账号是免费的.当注册并登陆一个postman账号后,用户可以获得如下权限. (1)同步和备份历史,集合,环境,和预置头. (2)可以轻松的处理来自 ...

  8. 【ShardingSphere】ShardingSphere学习(二)-核心概念-SQL

    逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称. 例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order. 真实表 在分片的数 ...

  9. 书评第001篇:《C++黑客编程揭秘与防范》

    本书基本信息 作者:冀云(编著) 出版社:人民邮电出版社 出版时间:2012-6-1 ISBN:9787115280640 版次:1 页数:265 字数:406000 印刷时间:2012-6-1 开本 ...

  10. MySQL查看及杀掉链接方法大全

    前言: 在数据库运维过程中,我们时常会关注数据库的链接情况,比如总共有多少链接.有多少活跃链接.有没有执行时间过长的链接等.数据库的各种异常也能通过链接情况间接反应出来,特别是数据库出现死锁或严重卡顿 ...