设计完成一个简单的shell脚本程序!
编写一个shell程序,使用一个菜单界面,方便Linux用户对U盘的加载,卸载操作。程序应该实现一下5个功能:
·加载U盘
·卸载U盘
·查看加载后的U盘的信息
·从Linux分区的硬盘中拷贝文件到U盘中
·从U盘中拷贝文件到Linux分区的硬盘指定位置上
1. 打开终端,输入命令
vim usb_script.sh
创建如下脚本程序
#!/bin/bash
# 初始化挂载标志位为0,表示U盘当前未挂载
flag=0
# 定义用于显示用户操作菜单的函数
function menu() {
echo "1. mount u " # 选项1:挂载U盘
echo "2. umount u" # 选项2:卸载U盘
echo "3. read u" # 选项3:读取U盘中的文件列表
echo "4. copy file to u" # 选项4:将文件复制到U盘
echo "5. copy file to system" # 选项5:将文件从U盘复制到系统
echo "enter 6 to exit" # 输入6以退出程序
}
# 定义挂载U盘的函数
function mountU() {
# 检查U盘是否已经挂载
if [ $flag -eq 0 ]; then
# 如果/mnt/usb目录不存在,则创建该目录
if [ ! -d "/mnt/usb" ]; then
sudo mkdir /mnt/usb
fi
# 尝试挂载U盘到/mnt/usb
if sudo mount /dev/sdb1 /mnt/usb; then
flag=1 # 标志位置1表示已挂载
echo "U盘已挂载到 /mnt/usb"
else
echo "U盘挂载失败"
fi
else
echo "U盘已被挂载"
fi
}
# 定义卸载U盘的函数
function umountU() {
# 确保U盘已经挂载
if [ $flag -eq 1 ]; then
# 尝试卸载U盘
if sudo umount /mnt/usb; then
flag=0 # 标志位置0表示已卸载
echo "U盘已卸载"
else
echo "U盘卸载失败"
fi
else
echo "U盘未挂载"
fi
}
# 定义读取U盘内容的函数
function readU() {
# 确保U盘已经挂载
if [ $flag -eq 1 ]; then
ls /mnt/usb # 列出U盘中的文件和目录
else
echo "U盘未挂载"
fi
}
# 定义将文件复制到U盘的函数
function copyFileToU() {
echo '请指定要复制到U盘的文件路径:'
read path # 读取用户输入的源文件路径
echo '请输入复制到U盘的目标路径:'
read destination # 读取用户输入的目标路径
# 确保U盘已经挂载
if [ $flag -eq 1 ]; then
# 确保源文件存在
if [ -f "$path" ]; then
# 如果目标路径不存在,则创建目标目录
if [ ! -d "/mnt/usb/${destination}" ]; then
sudo mkdir -p /mnt/usb/${destination}
fi
# 复制文件到U盘
sudo cp "$path" /mnt/usb/${destination}
echo "文件已复制到U盘"
else
echo "源文件不存在"
fi
else
echo "U盘未挂载"
fi
}
# 定义从U盘复制文件到系统的函数
function copyFileToSystem() {
echo '请指定要从U盘复制的文件名:'
read path # 读取用户输入的文件名
echo '请输入复制到系统的目标路径:'
read destination # 读取用户输入的目标路径
# 确保U盘已经挂载
if [ $flag -eq 1 ]; then
# 检查U盘中的文件是否存在
if [ -f "/mnt/usb/${path}" ]; then
# 复制文件到系统
cp "/mnt/usb/${path}" "$destination"
echo "文件已复制到系统"
else
echo "U盘中文件不存在"
fi
else
echo "U盘未挂载"
fi
}
# 定义主函数,用于处理用户输入并执行相应操作
function main() {
while true; do
menu # 显示菜单
read var # 读取用户的选择
case ${var} in
1)
mountU # 挂载U盘
;;
2)
umountU # 卸载U盘
;;
3)
readU # 读取U盘内容
;;
4)
copyFileToU # 将文件复制到U盘
;;
5)
copyFileToSystem # 从U盘复制文件到系统
;;
6)
umountU # 退出前卸载U盘
exit 0 # 退出程序
;;
*)
echo "无效选项,请重新输入" # 无效输入处理
;;
esac
done
}
# 调用主函数开始程序
main
注意:
/dev/sdb1
这个是我的设备,根据实际情况进行替换,一般来说都是这个
(可以输入命令lsblk来查看自己的设备)
输入:wq后回车退出
2. 插入U盘,连接到虚拟机
左下角显示U盘图标即为成功
如果未显示U盘图标,需要修改USB版本为3.1
(我这里默认是USB2.0,改为USB3.1才能成功显示U盘图标)
3. 在终端使用命令./usb_script.sh
使程序运行
4. 在实现功能4和5的时候注意一下文件的路径
功能4. 从Linux分区的硬盘中拷贝文件到U盘中
sudo cp "$path" /mnt/usb/${destination}
上面的完整脚本程序中已经带了前缀/mnt/usb/
后面才是自己输入的
功能5.从U盘中拷贝文件到Linux分区的硬盘指定位置上
cp "/mnt/usb/${path}" "$destination"
这里也带了前缀/mnt/usb/
destination的话如果图方便的话保存到根目录就行(也就是只打一个.)
就像这样
标签:脚本,shell,usb,mnt,U盘,echo,fi,挂载,操作系统 From: https://blog.csdn.net/qq_61504864/article/details/143205697