自动脚本生成器

自动脚本生成器

我想生成硬盘分区的脚本

#!/bin/bash
# Check if blkid is installed
command -v blkid > /dev/null 2>&1 || { echo >&2 "blkid is required but not installed. Aborting."; exit 1; }

# Specify the output script file
output_script="create_partitions2.sh"
# Generate mkdir commands for hard disk partitions based on names and labels
echo "#!/bin/bash" > "$output_script"
echo "" >> "$output_script"
echo "# Auto-generated script to create directories for hard disk partitions" >> "$output_script"
echo "echo 'Creating directories for hard disk partitions...'" >> "$output_script"

# Use blkid to get information about partitions
blkid -o list | awk '{print $1 "/ "  $3 }' | cut -d '/' -f 3-4 | cut -d '/' -f 1,2 | awk '{print "    mkdir /media/"   ($2=="(not" ? $1 : $2)    }' >> "$output_script"
echo "echo 'Giving Permission to the Created Directories...'" >> "$output_script"
blkid -o list | awk '{print $1 "/ "  $3 }' | cut -d '/' -f 3-4 | cut -d '/' -f 1,2 | awk '{print "    chmod 777 /media/"   ($2=="(not" ? $1 : $2) " -R"   }' >> "$output_script"
echo "echo 'Mounting Partitions to the Created Directories...'" >> "$output_script"
blkid -o list | awk '{print $1 "/ "  $3 }' | cut -d '/' -f 3-4 | cut -d '/' -f 1,2 | awk '{print "    mount /dev/" $1 " /media/"   ($2=="(not" ? $1 : $2)    }' >> "$output_script"
echo "echo 'Directories created successfully.'" >> "$output_script"

# Make the script executable
chmod +x "$output_script"

它给了我前两行空行。我想删除这两行以及一行用于挂载分区的行。

答案1

提取分区名称的方法可能不一致,并且将包括loop,,zram...zswap等设备,并且它会打印两行标题(这很可能就是您得到两行空行的原因)。

你可能想要使用更强大的工具(例如lsblk)以便更多地控制输出,然后对其进行文本处理...我并不打算为您编写脚本,但您可以将其用作模板:

lsblk -e 7,11 -nlo TYPE,NAME |
awk '/part/ {print $2}' |
xargs -I {} bash -c 'echo mkdir /media/"$1"; echo mount /dev/"$1" /media/"$1"' bash {}

...输出的内容如下:

mkdir /media/sda1
mount /dev/sda1 /media/sda1
mkdir /media/sda2
mount /dev/sda2 /media/sda2

...或者lsblk以固定数据结构的形式输出--json,然后像下面这样进行解析:

lsblk -e 7,11 --json -nlo TYPE,NAME |
jq -r '.blockdevices[] | select(."type" == "part") | ."name"' |
xargs -I {} bash -c 'echo mkdir /media/"$1"; echo mount /dev/"$1" /media/"$1"' bash {}

...这将产生相同的结果。

注意通常/media用于在每个用户名命名的子目录下为用户自动/手动挂载 udisks ...我理解您可能不期望用户名是sda1nvme*,但如果您选择不同的目标父目录(例如)可能会更好/mnt

相关内容