打包文件系统img的脚本如下:
#!/bin/sh
if [ $# != 2 ]; then
echo "Usage:$0 size_in_MB fs_floder_name"
else
rm -fr mnt
mkdir mnt
dd if=/dev/zero of=./$2.img bs=1M count=$1
echo "y" | mkfs.ext4 -b 4096 ./$2.img
sudo mount -o loop $2.img ./mnt
sudo cp -a $2/* ./mnt/
sync
sudo umount ./mnt/
fi
$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$*类似,但是可以当作数组用
$^ 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量
会去除重复的依赖目标,只保留一份。
$@ 表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于
目标中模式定义的集合。
$@ The file name of the target of the rule.
$^ The names of all the prerequisites, with spaces between them.
$< The name of the first prerequisite.
./mkext4img.sh 200 fs1
会生成新的fs1.img
$0 ./mkext4img.sh
$1 200
$2 fs1