学习资料:B站正点原子官方视频+文档
说明:这里不再去讲工具安装使用了,我遇到的问题都在问题篇总结出来了,这里是对shell,Linux文件
这些以后真正必须熟练运用的知识的理解与总结
再次说明:我是初学者,手搓毕竟还有很多不足之处,请大家多多包容,有问题能指出再好不过啦
一,shell命令
1,什么是shell
我们把Linux想成一家餐厅:
- 你:使用电脑的人
- 终端:你点餐的窗口
- Shell:听懂要求并传达给厨房的服务员
- Linux系统:后面的厨房
- 命令:你说的话
2,举个例子
例如你在终端输入:
ls过程是:
你输入“ls” → Shell看懂“查看文件” → Shell让Linux执行 → Linux返回文件列表 → Shell把结果显示给你所以:
Shell是你和Linux之间的翻译员。
3,最常用命令(大白话版)
(快来熟悉专属魔法咒语,大过节的亲戚面前装逼也倍有面子)
可能是因为我笨笨的,官方语言实在是看的快睡着了,正规描述还是看官方文档,我这里只是自己看得懂的理解
| pwd | 我现在在哪? |
| ls | 这里有什么? |
| ls -a | 把隐藏的也显示出来 |
| cd 文件夹 | 进入文件夹 |
| cd .. | 返回上一层 |
| mkdir 文件夹 | 创建文件夹 |
| touch 文件 | 创建空文件 |
| cat 文件 | 查看文件内容 |
| echo "文字“ | 显示一段文字 |
| cp 原文件 新文件 | 复制文件 |
| mv 旧名字 新名字 | 移动文件或改名 |
| file 文件 | 查看文件类型 |
| find | 寻找文件 |
| grep | 在文件中寻找文字 |
| clear | 清除终端屏幕 |
| rm 文件 | 删除文件 |
| rmdir 文件夹 | 删除空文件夹 |
| man 命令 | 查看命令说明书 |
| sudo 命令 | 临时使用管理员权限 |
| gedit | 打开某个文件 |
| ps | 查看正在运行的程序 |
| top | 实时查看系统运行状态 |
| df -h | 查看磁盘所剩空间 |
| du -sh 文件夹 | 查看文件夹大小 |
4,实战
1, 运行截图
2,命令解释
1. 查看外卖店准备开在哪里
pwd我现在在哪里?
ls这里有什么东西?
ls -a把隐藏的东西也显示出来。
2. 创建外卖店
mkdir takeaway_shop创建一家叫takeaway_shop的外卖店。
cd takeaway_shop走进外卖店。
pwd确认自己已经进入外卖店。
3. 创建订单室
mkdir orders创建一个存放订单的房间。
cd orders进入订单室。
4. 创建订单
touch order.txt创建一张空订单。
touch .shop_secret创建一份隐藏的店铺资料。
先输入:
ls只能看到普通订单。
再输入:
ls -a可以看到隐藏的.shop_secret。
5. 填写订单
gedit order.txt在打开的记事本里输入:
顾客:小明 外卖:牛肉面 状态:制作中保存并关闭窗口。
6. 查看订单
cat order.txt终端会显示订单内容。
echo "外卖店收到新订单"终端会显示这句话。
7. 复制订单
cp order.txt order_copy.txt相当于复印一张订单。
ls现在可以看到两份订单。
8. 给订单改名
mv order_copy.txt finished_order.txt把复制的订单改名为“已完成订单”。
ls9. 查看订单是什么文件
file order.txtLinux会告诉你这是文本文件。
10. 寻找订单
find . -name "order.txt"订单放在哪里?
grep "牛肉面" order.txt在订单中寻找“牛肉面”。
11. 查看外卖店和电脑状态
du -sh .查看订单室占用了多少空间。
df -h查看电脑磁盘还剩多少空间。
ps查看有哪些程序正在工作。
top查看哪些程序最忙。按q退出。
12. 查看命令说明
man ls查看ls的说明书。按q退出。
sudo ls相当于临时拿到“店长钥匙”,用管理员身份查看文件。
13. 擦干净屏幕
clear只清理终端画面,不会删除订单。
14. 外卖店关门,清理订单
rm order.txt删除原订单。
rm finished_order.txt删除已完成订单。
rm .shop_secret删除隐藏资料。
返回外卖店:
cd ..删除空订单室:
rmdir orders离开外卖店:
cd ..删除空外卖店:
rmdir takeaway_shop最后查看:
ls整个过程就是:
找到位置 → 开外卖店 → 建订单室 → 写订单 → 复制订单 → 改名 → 查找订单 → 删除订单 → 关闭外卖店
二,Ubuntu文件系统结构
把Linux文件系统想成一栋大楼。
根目录/
/就是整栋大楼的大门,所有房间都在它里面。
/ ├── home ├── etc ├── dev ├── boot └── tmp常见文件夹(了解)
| 文件夹 | 生活类比 | 用途 |
|---|---|---|
/home | 普通用户的房间 | 保存你的文件 |
/root | 管理员的房间 | root用户的文件 |
/bin | 工具箱 | 保存ls、cp等命令 |
/sbin | 管理员工具箱 | 保存系统管理命令 |
/etc | 规章制度柜 | 保存系统配置 |
/boot | 启动室 | 保存Linux启动文件 |
/dev | 设备窗口 | 表示硬盘、串口等设备 |
/lib | 公共零件库 | 保存程序使用的库 |
/tmp | 临时桌子 | 保存临时文件 |
/var | 记录室 | 保存日志等经常变化的文件 |
/proc | 系统仪表盘 | 显示进程和系统运行信息 |
/sys | 硬件仪表盘 | 显示内核和硬件信息 |
/media | 自动停车位 | U盘通常挂载在这里 |
/mnt | 手动停车位 | 手动挂载设备 |
/usr | 软件仓库 | 保存大量软件和相关文件 |
/opt | 第三方软件区 | 安装额外软件 |
/srv | 服务区 | 保存网络服务数据 |
(注意:/dev中主要是“设备文件”,不是驱动程序本身。)
绝对路径
从大楼入口/开始写完整地址:
/home/zyy/order.txt类似:
中国/某省/某市/某街道/某房间
无论你当前在哪里,这个地址都不会变。
相对路径
从你当前所在的位置开始写:
order.txt类似:
从我现在的位置往前走。
例如当前位于:
/home/zyy那么:
order.txt表示:
/home/zyy/order.txt一句话记忆:
/是整栋大楼;绝对路径从大门开始,相对路径从当前位置开始。
三,文件权限管理
1,文件权限是什么
把文件想成一张外卖订单。
不同的人对订单能做的事情不同:
r:read,能查看订单。w:write,能修改订单。x:execute,能把它当程序运行。
外卖店里有三类人:
u:店主,也就是文件拥有者。g:店里的员工,也就是同组用户。o:路人,也就是其他用户。
2,看懂权限
运行:
ls -l a.c可能看到:
-rw-rw-r-- 1 zyy zyy 100 a.c把权限拆开:
- rw- rw- r-- │ │ │ │ │ │ │ └─ 其他人 │ │ └─────── 同组用户 │ └───────────── 文件拥有者 └────────────────── 文件类型具体意思:
- 第一个
-:这是普通文件。 - 第一个
rw-:店主可以读、写,不能运行。 - 第二个
rw-:员工可以读、写,不能运行。 - 最后
r--:其他人只能查看。
常见文件类型:
-:普通文件。d:文件夹。l:软链接。
3,数字权限(二进制表示)
Linux也可以用数字表示权限:
r = 4 w = 2 x = 1把需要的权限加起来:
7 = 4+2+1:rwx,可读、可写、可运行。6 = 4+2:rw-,可读、可写。5 = 4+1:r-x,可读、可运行。4:r--,只能读。0:---,什么都不能做。
因此:
-rw-rw-r--对应:
6644,chmod:修改权限
chmod相当于修改外卖店的规定。
把a.c修改为rw-rw-r--:
chmod 664 a.c给文件拥有者增加执行权限:
chmod u+x a.cu:拥有者。+:增加权限。x:执行权限。
删除执行权限:
chmod u-x a.c注意:C源文件a.c通常不需要执行权限。编译出来的程序才需要执行权限。
5,chown:修改主人
chown相当于把外卖店转让给别人。
例如把a.c交给用户zyy:
sudo chown zyy a.c同时修改拥有者和用户组:
sudo chown zyy:zyy a.c- 第一个
zyy:新拥有者。 - 第二个
zyy:新用户组。
最简单记忆
r:能看 w:能改 x:能运行 chmod:修改权限 chown:更换主人三,Linux连接文件
先理解普通文件
把一个文件想成一个房间:
order.txt → 房间里放着“牛肉面订单”order.txt是房间的门- 文件内容是房间里的东西
复制文件
复制文件相当于重新建一个房间:
order.txt → 房间1:牛肉面订单 order_copy.txt → 房间2:牛肉面订单这是两个独立房间
修改房间1,不会影响房间2
硬链接
硬链接相当于:
给同一个房间再开一扇门。
order.txt ──→ 同一个房间 hard.txt ──→ 同一个房间两个名字进入的是同一个房间。
所以:
- 修改
order.txt,hard.txt也会看到变化。 - 删除
order.txt这扇门,还能从hard.txt进去。 - 两扇门都删除后,房间才真正消失。
创建硬链接:
ln order.txt hard.txt软链接
软链接相当于:
放一块路牌,写着“order.txt在那边”。
soft.txt路牌 → order.txt门 → 房间创建软链接:
ln -s order.txt soft.txt如果删除order.txt这扇门:
soft.txt路牌 → 找不到order.txt → 无法打开所以软链接类似Windows快捷方式。
inode是什么
inode就是Linux给“房间”设置的内部编号。
你现在只需要知道:
- 硬链接:两个门通向同一个房间,所以inode相同。
- 软链接:它只是一块路牌,所以有自己的inode。
最重要的区别
复制:建造两个房间 硬链接:同一个房间开两扇门 软链接:放一块指路牌实战
运行截图
命令解释
echo "牛肉面订单" > order.txt创建order.txt,并把“牛肉面订单”写进去。
echo:输出文字>:把文字写进文件order.txt:文件名
(注意:如果文件已经存在,>会覆盖原来的内容)
ln order.txt hard.txt给order.txt创建一个硬链接,名字叫hard.txt。
可以理解为:
给同一个房间增加一扇叫
hard.txt的门。
ln -s order.txt soft.txt给order.txt创建一个软链接,名字叫soft.txt。
ln:创建链接。-s:表示软链接。order.txt:被指向的文件。soft.txt:快捷方式的名字。
可以理解为:
创建一块叫
soft.txt的路牌,指向order.txt。
rm order.txt删除order.txt这个名字。
此时:
hard.txt仍然可以进入原来的房间。soft.txt指向的order.txt已经不存在。
cat hard.txt查看hard.txt的内容。
结果仍然是:
牛肉面订单因为硬链接是同一个文件的另一个入口。
cat soft.txt通过软链接查看内容。
这时会报错,因为它指向的order.txt已经删除了。
最后清理
rm hard.txt删除硬链接。删除后,真正的文件内容也会消失。
rm soft.txt删除已经失效的软链接。
完整过程:
创建文件 → 创建硬链接 → 创建软链接 → 删除原文件 → 硬链接仍然可用 → 软链接失效 → 清理文件四,vim编译器
Vim是什么
Vim是一个在终端里编辑文字的工具,类似“终端版记事本”。
打开订单:
vim order.txtVim为什么有三种模式
把Vim想成一个管理订单的员工,他有三种工作状态。
1. 普通模式:查看订单
刚打开Vim时,默认就是普通模式
这个状态下不能直接输入文字,主要用来:
- 移动光标。
- 删除。
- 复制。
- 粘贴。
- 撤销。
生活类比:
员工正在检查订单,还没有拿笔写字。
2. 编辑模式:填写订单
在普通模式下按:
a就可以开始输入文字。
生活类比:
员工拿起笔,开始填写订单。
编辑完成后按:
Esc返回普通模式。
3. 命令模式:保存或退出
先按Esc回到普通模式,然后输入:
:屏幕底部会出现一个冒号,这时可以输入保存、退出等命令。
最重要的保存和退出
保存并退出:
:wq然后按回车。
只保存:
:w不保存,直接退出:
:q!正常退出:
:q(如果文件修改后没有保存,:q不会让你退出)
实例
运行截图
步骤
1,在终端输入:
vim order.txt2,然后:
- 按a
- 输入(随便输)
- 保存
按Esc
输入:wq
按回车
3,查看文件:
cat order.txt4,清除
五,Linux C编程
截图样例
第一步:打开文件
终端输入:
vim hello.c意思:用Vim打开一个叫hello.c的文件。
第二步:写程序
按i,然后输入:
#include <stdio.h> int main() { printf("Hello\n"); return 0; }程序的意思:
main:程序从这里开始。printf:在屏幕显示文字。return 0:程序正常结束。
按Esc,输入:wq,回车保存。
第三步:编译
gcc hello.c -o hello意思:
GCC把
hello.c翻译成一个叫hello的程序。
第四步:运行
./hello结果:
Hello五,make和makefile
先分清三个东西:
GCC:真正负责编译 Makefile:写着“怎么编译”的文本文件 make:读取Makefile并执行编译命令的软件为什么需要它们
假设程序只有一个文件:
hello.c可以手动编译:
gcc hello.c -o hello但如果程序有很多文件:
main.c add.c sub.c menu.c每次都要输入:
gcc main.c add.c sub.c menu.c -o app文件越多,命令越长,也容易写错。
所以我们把这条命令保存在一个叫Makefile的文件中
Makefile是什么
Makefile就是一张“编译说明书”
内容例如:
app: main.c add.c gcc main.c add.c -o app第一行:
app: main.c add.c意思是:
要生成
app,需要main.c和add.c
第二行:
gcc main.c add.c -o app意思是:
使用这条GCC命令生成
app
注意:第二行前面必须按一次Tab键
make是什么
终端输入:
makemake会做三件事:
- 在当前文件夹寻找
Makefile。 - 阅读里面的编译规则。
- 执行里面的GCC命令。
最终生成:
app然后运行:
./app为什么不直接使用GCC
直接使用GCC:
gcc main.c add.c -o app每次都要自己输入完整命令。
使用make:
make只需要输入一个单词,make会自动完成。
最简单的类比
假设要制作一份外卖套餐:
main.c、add.c:做菜需要的材料。gcc:真正做菜的厨师。Makefile:写着做菜步骤的纸。make:拿着步骤安排厨师的店长。app:最后做好的外卖。
最重要的一句话:
Makefile保存编译方法,make读取Makefile,GCC真正完成编译。
Makefile最基本的格式
目标: 依赖 命令(注意:第三行“命令”前必须按一次Tab键,不过现在已经自动了)
目标:最后想得到什么 依赖:需要哪些原材料 命令:具体怎样制作外卖类比:
牛肉面: 面条 牛肉 厨师制作牛肉面C程序的格式
程序名: 需要的C文件 gcc 需要的C文件 -o 程序名例如:
app: main.c add.c gcc main.c add.c -o app解释:
app:最终生成的程序。main.c add.c:生成程序需要的源文件。gcc...:真正执行的编译命令。
执行:
make可以重复使用的模板
以后项目可以按照这个格式写:
TARGET = app SRC = main.c add.c $(TARGET): $(SRC) gcc $(SRC) -o $(TARGET) clean: rm -f $(TARGET)注意:gcc和rm前面都要按一次Tab。
解释:
TARGET:程序名称 SRC:所有C源文件 $(TARGET):使用TARGET里面的内容 $(SRC):使用SRC里面的内容所以:
gcc $(SRC) -o $(TARGET)实际相当于:
gcc main.c add.c -o app编译:
make删除编译出来的程序:
make clean你只需要记住这个核心格式:
目标: 依赖 命令也就是:
我要生成什么:我需要什么;下一行写具体怎么生成。
六,makefile基本语法
1. 编译规则
固定格式:
目标: 依赖文件 执行命令例如:
app: main.c add.c gcc main.c add.c -o app解释:
app:想生成的程序。main.c add.c:生成程序需要的文件。gcc...:具体编译方法。
注意:gcc前面必须按一次Tab,不能用普通空格。
2. 定义变量
TARGET = app SRC = main.c add.c CC = gcc使用变量:
$(TARGET) $(SRC) $(CC)例如:
$(TARGET): $(SRC) $(CC) $(SRC) -o $(TARGET)实际相当于:
gcc main.c add.c -o app3. 注释
#后面是说明文字,不会执行:
# 编译程序4. 清理规则
clean: rm -f app执行:
make clean作用:删除编译生成的程序。
完整基础模板
# 编译器 CC = gcc # 最终程序名称 TARGET = app # C源文件 SRC = main.c add.c # 编译规则 $(TARGET): $(SRC) $(CC) $(SRC) -o $(TARGET) # 清理规则 clean: rm -f $(TARGET)使用:
make ./app make clean目标: 依赖 命令实例
1. 创建文件夹
mkdir make_demo cd make_demo2. 创建main.c
vim main.c按i输入:
#include <stdio.h> int add(int a, int b); int main() { printf("2+3=%d\n", add(2, 3)); return 0; }按Esc,输入:wq保存退出。
3. 创建add.c
vim add.c按i输入:
int add(int a, int b) { return a + b; }保存退出。
4. 创建Makefile
vim Makefile按i输入:
CC = gcc TARGET = app SRC = main.c add.c $(TARGET): $(SRC) $(CC) $(SRC) -o $(TARGET) clean: rm -f $(TARGET)注意:$(CC)和rm前面必须按一次Tab键。
保存退出。
5. 自动编译
make6. 运行程序
./app结果:
2+3=57. 删除编译结果
make clean这个实例中:
main.c + add.c:源文件 Makefile:记录编译规则 make:执行规则 app:生成的程序运行截图
这里要注意修改文件后要重新make
七,shell脚本入门
1. Shell脚本是什么
把多条终端命令放进一个文件,以后一次执行。
Shell脚本 = 自动执行的命令清单2. 基本格式
#!/bin/bash 命令1 命令2 命令3#!/bin/bash:告诉系统使用Bash执行。- 脚本通常以
.sh结尾。 - 命令从上到下执行。
3. read接收输入
read -p "请输入姓名:" name echo "$name"read:等待用户输入。name:保存输入内容。- $name:取出内容。
4. 整数计算
result=$((10 + 20))Shell整数计算使用:
$((表达式))5. test和[ ]判断
判断文件是否存在:
test -f order.txt也可以写成:
[ -f order.txt ]注意:中括号里面必须留空格。
常用判断:
-f:普通文件是否存在 -d:文件夹是否存在 -e:文件或文件夹是否存在 = :字符串相同 !=:字符串不同6.&&和||
命令1 && 命令2命令1成功,才执行命令2。
命令1 || 命令2命令1失败,才执行命令2。
记忆:
&&:成功后继续 ||:失败后处理7. 脚本参数
运行:
bash shop.sh 牛肉面 加辣脚本中:
$0:脚本名shop.sh $1:牛肉面 $2:加辣 $#:参数数量,这里是2 $@:全部参数标准模板
#!/bin/bash # 接收用户输入 read -p "请输入内容:" value # 整数计算 result=$((10 + 20)) # 判断文件 test -f "$1" && echo "文件存在" || echo "文件不存在" # 显示输入和结果 echo "输入内容:$value" echo "计算结果:$result" # 显示脚本参数 echo "脚本名称:$0" echo "第一个参数:$1" echo "参数数量:$#" echo "全部参数:$@"这节课最核心的是:
Shell脚本把多条命令放进一个文件;
read接收输入,$(( ))计算,test判断,&&和||根据成功或失败选择是否继续。
Shell脚本知识点总结
Shell脚本
把多条终端命令写进一个文件,一次运行。
基本格式
#!/bin/bash命令从上到下执行,文件通常以
.sh结尾。read接收用户输入,并保存到变量。
变量
name="小明" echo "$name"保存变量时不用
$,使用变量时加$。整数计算
result=$((10 + 20))test或[ ]用于判断文件、数字和字符串。
test -f order.txt [ -f order.txt ]&&和||&&:前面成功,执行后面。||:前面失败,执行后面。
脚本参数
$0:脚本名称。$1、$2:第一个、第二个参数。$#:参数数量。$@:全部参数。
核心一句话:
Shell脚本就是自动执行多条命令,并且可以接收输入、计算、判断和使用参数。
实例
下面做一个“外卖订单”Shell脚本。
1. 创建脚本
vim shop.sh按i,输入:
#!/bin/bash food="$1" price="$2" read -p "请输入购买数量:" count total=$((price * count)) echo "商品:$food" echo "数量:$count" echo "总价:$total 元" echo "商品:$food,数量:$count,总价:$total 元" > order.txt test -f order.txt && echo "订单创建成功" || echo "订单创建失败" echo "脚本名称:$0" echo "参数数量:$#" echo "全部参数:$@"逐行解释
#!/bin/bash告诉Linux:使用Bash执行这个脚本。
food="$1"把运行脚本时的第一个参数保存到food。
例如:
bash shop.sh 牛肉面 15这里$1就是“牛肉面”。
price="$2"把第二个参数保存到price。这里$2就是15。
不可有空格
read -p "请输入购买数量:" count显示提示,等待用户输入数量,并保存到count。
total=$((price * count))计算:
单价 × 数量结果保存到total。
echo "商品:$food"显示商品名称。
echo "数量:$count"显示购买数量。
echo "总价:$total 元"显示计算后的总价。
echo "商品:$food,数量:$count,总价:$total 元" > order.txt把订单内容写入order.txt。
>表示覆盖写入文件。
test -f order.txt && echo "订单创建成功" || echo "订单创建失败"检查order.txt是否存在:
- 存在:显示“订单创建成功”。
- 不存在:显示“订单创建失败”。
echo "脚本名称:$0"显示脚本名称,例如shop.sh。
echo "参数数量:$#"显示参数数量。这里是2个参数。
echo "全部参数:$@"显示全部参数:
牛肉面 15完整过程:
接收商品和单价 → 询问数量 → 计算总价 → 保存订单 → 检查订单 → 显示参数信息13:18
按Esc,输入:wq,回车保存。
2. 运行脚本
bash shop.sh 牛肉面 15根据提示输入:
2结果:
商品:牛肉面 数量:2 总价:30 元 订单创建成功 脚本名称:shop.sh 参数数量:2 全部参数:牛肉面 15运行截图
zyy@zyy-VMware-Virtual-Platform:~$ vim shop.sh
zyy@zyy-VMware-Virtual-Platform:~$ bash shop.sh 牛肉面 15
请输入购买数量2
商品:牛肉面
数量: 2
总价: 30元
订单创建成功
脚本名称:shop.sh
参数数量:2
全部参数:牛肉面 15
八,shell脚本条件判断,函数和循环
1. if判断
C语言:
if (age >= 18) { printf("成年"); } else { printf("未成年"); }Shell:
if [ "$age" -ge 18 ]; then echo "成年" else echo "未成年" fi对应关系:
C的{ } → Shell的then、else、fi C的printf → Shell的echo C的>= → Shell的-ge易错点:
[ "$age" -ge 18 ]里面必须有空格。- Shell的
if最后写fi。 - 数字不能直接使用
>判断。
2. case多选
C语言的switch:
switch (num) { case 1: break; }Shell对应case:
case "$num" in 1) echo "牛肉面" ;; *) echo "没有这个选项" ;; esac易错点:
- C使用
break,Shell使用;;。 - Shell的
case最后写esac。 *相当于C语言的default。
3. 函数
C语言:
void show() { printf("完成"); }Shell:
show() { echo "完成" }调用:
show易错点:
- Shell调用函数时不写
()。 - Shell命令结尾通常不需要分号。
4. while循环
C语言:
while (i < 3) { i++; }Shell:
while [ "$i" -lt 3 ]; do i=$((i + 1)) done易错点:
while最后写done。- 必须修改
i,否则会死循环。
5. for循环
Shell也支持类似C语言的写法:
for ((i=0; i<3; i++)); do echo "$i" done易错点:
- Shell使用
do开始循环内容。 - 使用
done结束,不使用}。
最重要的对照
C语言的{ } → Shell的then/fi或do/done switch → case break → ;; printf → echo >= → -ge <= → -le == → -eq一句话记忆:
逻辑和C语言一样,只是Shell用
fi结束if,用done结束循环。
实例
命令解释
#!/bin/bash使用Bash执行这个脚本。
show_menu()定义一个叫show_menu的函数。
{函数内容开始,类似C语言的{。
echo "1. 牛肉面:15元"显示第一种商品。
echo "2. 炒饭:12元"显示第二种商品。
}函数定义结束。
show_menu调用函数,显示菜单。Shell调用函数时不写()。
read -p "请选择商品:" choice等待用户输入,并把内容保存到choice。
case "$choice" in根据用户输入的choice进行选择,类似C语言的switch。
1)如果用户输入1。
food="牛肉面"把商品名称保存到food。
price=15把价格15保存到price。
;;这个选项结束,类似C语言的break。
2)如果用户输入2。
food="炒饭" price=12保存商品名称和价格。
*)*表示除1和2之外的其他输入,类似C语言的default。
echo "没有这个商品"显示错误提示。
exit 1结束脚本。1表示脚本因为错误而结束。
;;当前选项结束。
esac整个case结束。
read -p "请输入数量:" count让用户输入购买数量,保存到count。
while [ "$count" -le 0 ]; do只要数量小于或等于0,就一直循环。
-le:小于或等于。do:循环内容开始。
read -p "数量必须大于0,请重新输入:" count让用户重新输入数量。
donewhile循环结束。
total=$((price * count))计算:
价格 × 数量把结果保存到total。
read -p "请输入你的余额:" money让用户输入余额,保存到money。
if [ "$money" -ge "$total" ]; then判断余额是否大于或等于总价。
-ge:大于或等于。then:条件成立后执行。
echo "付款成功,总价:$total 元"余额足够,显示付款成功。
for ((i=1; i<=count; i++)); do从1开始循环,每次增加1,一共循环count次。
echo "正在打包第$i份$food"显示当前正在打包第几份外卖。
donefor循环结束。
else余额不足时执行下面的内容。
echo "余额不足"显示余额不足。
fi整个if判断结束。
整体过程:
显示菜单 → 选择商品 → 输入数量 → 计算总价 → 输入余额 → 判断能否付款 → 重复打包外卖运行截图
zyy@zyy-VMware-Virtual-Platform:~$ vim shop.sh
zyy@zyy-VMware-Virtual-Platform:~$ bash shop.sh
1. 牛肉面:15元
2. 炒饭:12元
请选择商品: