Shell编程 正则表达式 扩展练习果汁售卖

扩展练习果汁售卖:

(1)显示饮品菜单以及对应价格

(2)用户选择自己喜欢的饮品,根据用户选择可以计算出对应价格。

分析

  • 定义一个饮品菜单和对应的价格数组,分别使用menuprices来存储。
  • 使用for循环遍历饮品菜单和价格数组,并逐个输出菜单项及其价格,展示给用户。
  • 使用循环和条件判断,允许用户选择喜欢的饮品编号和数量。用户输入的选择会被存储在selections这个关联数组中,其中饮品名作为关联数组的键,而数量作为对应的值。
  • 计算总价时,使用嵌套的for循环遍历selections数组,对每个饮品的数量和价格进行累加计算得到小计,然后将小计添加到总价中。
  • 最后,根据总价和用户选择的饮品数量,输出用户选择的饮品及其总价格。

完整代码:

#!/bin/bash

# 饮品菜单及对应价格
menu=("橙汁" "苹果汁" "西瓜汁" "草莓汁" "蓝莓汁" "菠萝汁" "葡萄汁")
prices=(10 12 15 18 20 15 16)

# 显示饮品菜单及价格
echo "欢迎光临果汁店!这里是我们的饮品菜单:"
for ((i=0; i<${#menu[@]}; i++)); do
  echo "$(($i+1)). ${menu[$i]} - ¥${prices[$i]}"
done

# 用户选择饮品及数量
declare -A selections
while true; do
  read -p "请选择您喜欢的饮品编号(输入相应数字)和数量(输入数字)[结束选择请输入0]: " choice quantity
  
  if [[ $choice -eq 0 ]]; then
    break
  elif [[ $choice =~ ^[1-7]$ && $quantity =~ ^[1-9][0-9]*$ ]]; then
    index=$(($choice-1))
    selected_beverage=${menu[$index]}
    price=${prices[$index]}
    selections[$selected_beverage]=$quantity
  else
    echo "无效的选择!请重新输入。"
  fi
done

# 计算总价
total_price=0
selected_beverages=""
for beverage in "${!selections[@]}"; do
  quantity=${selections[$beverage]}
  price=${prices[$index]}
  sub_total=$((price * quantity))
  total_price=$((total_price + sub_total))
  selected_beverages+=",${quantity}${beverage}"
done

# 输出结果
if [[ $total_price -gt 0 ]]; then
  echo "您选择了${selected_beverages:2},总价格为¥$total_price。"
else
  echo "没有选择任何饮品。"
fi

测试

在这里插入图片描述

该脚本允许用户选择多个饮品,并显示每个选项的完整名称(包括数量)。您可以根据需要进行修改和扩展,例如添加更多的饮品选项和价格,或者改进输入验证和用户体验,以满足更复杂的要求。

正则表达式

练习

  1. 显示/proc/meminfo文件中以不区分大小写的"s"开头的行:
grep -i "^[sS]" /proc/meminfo

在这里插入图片描述

  1. 显示/etc/passwd中以nologin结尾的行:
grep "nologin$" /etc/passwd

在这里插入图片描述

  1. 取出默认shell为/sbin/nologin的用户列表:
awk -F: '$7=="/sbin/nologin"{print $1}' /etc/passwd
  1. 取出默认shell为bash,且其用户ID号最小的用户的用户名:
awk -F: '$7=="/bin/bash"{print $1}' /etc/passwd | sort -t: -k3n | head -n1

在这里插入图片描述

  1. 显示/etc/inittab中以"#"开头,后面跟着一个或多个空白字符,而后跟了任意非空白字符的行:
grep "^#[[:space:]]\+[^[:space:]]" /etc/inittab

在这里插入图片描述

  1. 显示/etc/inittab中包含一个数值的行(即两个冒号中间有一个数字):
grep ":[0-9]:" /etc/inittab
  1. 显示/boot/grub2/grub.cfg文件中以一个或多个空白字符开头的行:
grep "^[[:space:]]" /boot/grub2/grub.cfg

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 显示/etc/inittab文件中以一个数字开头,并以与开头数字相同的数字结尾的行:
grep "^1.*1$" /etc/inittab
  1. 找出/proc/cpuinfo中的1位数或2位数:
grep "\<[0-9]\{1,2\}\>" /proc/cpuinfo

在这里插入图片描述

  1. 查找当前系统上名字为student(必须出现在行首)的用户的账号相关信息,文件为/etc/passwd:
grep "^student:" /etc/passwd

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值