自动挂载ISO镜像的脚本怎么写

wen 实用脚本 1

本文目录导读:

自动挂载ISO镜像的脚本怎么写

  1. 基础自动挂载脚本
  2. 带卸载功能的脚本
  3. 批量挂载多个ISO的脚本
  4. 自动挂载fstab配置(持久化)
  5. systemd服务自动挂载
  6. 使用说明
  7. 注意事项

我来为你提供几种自动挂载ISO镜像的脚本方案:

基础自动挂载脚本

#!/bin/bash
# 自动挂载ISO镜像脚本
# 配置变量
ISO_PATH="/path/to/your.iso"  # ISO文件路径
MOUNT_POINT="/mnt/iso"         # 挂载点
# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then 
    echo "请使用root权限运行此脚本"
    exit 1
fi
# 创建挂载点目录
if [ ! -d "$MOUNT_POINT" ]; then
    mkdir -p "$MOUNT_POINT"
    echo "创建挂载点: $MOUNT_POINT"
fi
# 检查ISO文件是否存在
if [ ! -f "$ISO_PATH" ]; then
    echo "错误: ISO文件不存在: $ISO_PATH"
    exit 1
fi
# 检查是否已经挂载
if mount | grep -q "$MOUNT_POINT"; then
    echo "ISO已经挂载到 $MOUNT_POINT"
    exit 0
fi
# 挂载ISO
mount -o loop "$ISO_PATH" "$MOUNT_POINT"
# 检查挂载是否成功
if [ $? -eq 0 ]; then
    echo "成功挂载ISO到: $MOUNT_POINT"
else
    echo "挂载失败"
    exit 1
fi

带卸载功能的脚本

#!/bin/bash
# ISO镜像挂载/卸载管理器
usage() {
    echo "使用方法: $0 {mount|umount|status} [iso_path] [mount_point]"
    echo "  mount  - 挂载ISO"
    echo "  umount - 卸载ISO"
    echo "  status - 查看挂载状态"
    exit 1
}
# 默认配置
ISO_PATH="${2:-/path/to/default.iso}"
MOUNT_POINT="${3:-/mnt/iso}"
check_root() {
    if [ "$EUID" -ne 0 ]; then 
        echo "请使用root权限运行此脚本"
        exit 1
    fi
}
mount_iso() {
    check_root
    # 创建挂载点
    if [ ! -d "$MOUNT_POINT" ]; then
        mkdir -p "$MOUNT_POINT"
    fi
    # 检查是否已挂载
    if mount | grep -q "$MOUNT_POINT"; then
        echo "警告: $MOUNT_POINT 已经挂载"
        mount | grep "$MOUNT_POINT"
        exit 0
    fi
    # 检查ISO文件
    if [ ! -f "$ISO_PATH" ]; then
        echo "错误: ISO文件不存在: $ISO_PATH"
        exit 1
    fi
    # 挂载ISO
    echo "正在挂载 $ISO_PATH 到 $MOUNT_POINT..."
    mount -o loop,ro "$ISO_PATH" "$MOUNT_POINT"
    if [ $? -eq 0 ]; then
        echo "挂载成功!"
        df -h "$MOUNT_POINT"
    else
        echo "挂载失败!"
        exit 1
    fi
}
umount_iso() {
    check_root
    if [ ! -d "$MOUNT_POINT" ]; then
        echo "挂载点不存在: $MOUNT_POINT"
        exit 1
    fi
    echo "正在卸载 $MOUNT_POINT..."
    umount "$MOUNT_POINT"
    if [ $? -eq 0 ]; then
        echo "卸载成功!"
        rmdir "$MOUNT_POINT" 2>/dev/null || true
    else
        echo "卸载失败,可能正在使用中"
        fuser -km "$MOUNT_POINT" 2>/dev/null
        sleep 2
        umount "$MOUNT_POINT" && echo "强制卸载成功" || echo "卸载失败"
    fi
}
status_iso() {
    echo "=== ISO挂载状态 ==="
    mount | grep -E "\.iso|loop" || echo "没有已挂载的ISO镜像"
    echo "=================="
}
# 主程序
case "$1" in
    mount)
        mount_iso
        ;;
    umount)
        umount_iso
        ;;
    status)
        status_iso
        ;;
    *)
        usage
        ;;
esac

批量挂载多个ISO的脚本

#!/bin/bash
# 批量挂载ISO镜像脚本
ISO_DIR="/path/to/iso/directory"  # ISO文件存放目录
BASE_MOUNT="/mnt"                  # 基础挂载路径
check_root() {
    if [ "$EUID" -ne 0 ]; then 
        echo "请使用root权限运行此脚本"
        exit 1
    fi
}
# 获取ISO文件列表
get_iso_files() {
    find "$ISO_DIR" -name "*.iso" -type f 2>/dev/null | sort
}
# 挂载单个ISO
mount_single_iso() {
    local iso_file="$1"
    local iso_name=$(basename "$iso_file" .iso)
    local mount_point="${BASE_MOUNT}/${iso_name}"
    # 创建挂载点
    mkdir -p "$mount_point"
    # 检查是否已挂载
    if mount | grep -q "$mount_point"; then
        echo "已挂载: $iso_name"
        return 0
    fi
    echo "正在挂载: $iso_name"
    mount -o loop,ro "$iso_file" "$mount_point"
    if [ $? -eq 0 ]; then
        echo "成功挂载 $iso_name -> $mount_point"
    else
        echo "挂载失败: $iso_name"
        rmdir "$mount_point" 2>/dev/null
        return 1
    fi
}
# 卸载所有ISO
umount_all_iso() {
    echo "正在卸载所有ISO镜像..."
    mount | grep "$BASE_MOUNT" | while read line; do
        local mount_point=$(echo "$line" | awk '{print $3}')
        echo "卸载: $mount_point"
        umount "$mount_point" 2>/dev/null || {
            fuser -km "$mount_point" 2>/dev/null
            sleep 1
            umount "$mount_point" 2>/dev/null || echo "无法卸载: $mount_point"
        }
        rmdir "$mount_point" 2>/dev/null
    done
    echo "卸载完成"
}
# 主程序
check_root
echo "=== ISO批量挂载工具 ==="
# 查找ISO文件
iso_files=($(get_iso_files))
iso_count=${#iso_files[@]}
if [ $iso_count -eq 0 ]; then
    echo "在 $ISO_DIR 中未找到ISO文件"
    exit 1
fi
echo "找到 $iso_count 个ISO文件"
# 显示选项
echo "请选择操作:"
echo "1) 挂载所有ISO"
echo "2) 卸载所有ISO"
echo "3) 查看挂载状态"
echo "4) 退出"
read -p "输入选项 (1-4): " choice
case $choice in
    1)
        echo "开始挂载所有ISO..."
        for iso in "${iso_files[@]}"; do
            mount_single_iso "$iso"
        done
        echo "挂载完成!"
        ;;
    2)
        umount_all_iso
        ;;
    3)
        echo "=== 挂载状态 ==="
        mount | grep "$BASE_MOUNT" || echo "没有已挂载的ISO"
        ;;
    4)
        exit 0
        ;;
    *)
        echo "无效选项"
        ;;
esac

自动挂载fstab配置(持久化)

如果你想在系统启动时自动挂载ISO,可以添加到fstab:

# 创建挂载点
sudo mkdir -p /mnt/iso
# 添加到 /etc/fstab(需要root权限)
echo "/path/to/your.iso /mnt/iso iso9660 loop,ro,auto 0 0" | sudo tee -a /etc/fstab
# 测试挂载
sudo mount -a

systemd服务自动挂载

#!/bin/bash
# 创建systemd服务脚本
cat << 'EOF' | sudo tee /etc/systemd/system/iso-mount.service
[Unit]
Description=ISO Image Auto Mount Service
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/mount-iso.sh mount
ExecStop=/usr/local/bin/mount-iso.sh umount
[Install]
WantedBy=multi-user.target
EOF
# 启用服务
sudo systemctl daemon-reload
sudo systemctl enable iso-mount.service
sudo systemctl start iso-mount.service

使用说明

  1. 保存脚本:将脚本保存为 mount-iso.sh
  2. 添加执行权限chmod +x mount-iso.sh
  3. 修改配置:根据实际情况修改ISO路径和挂载点
  4. 运行脚本
    • 基础版:./mount-iso.sh
    • 管理版:./mount-iso.sh mount./mount-iso.sh umount

注意事项

  • 需要root权限运行
  • ISO文件路径需要使用绝对路径
  • 挂载点目录需要存在或脚本会自动创建
  • 卸载前确保没有程序在使用挂载目录中的文件

选择适合你需求的脚本版本即可。

抱歉,评论功能暂时关闭!