最近在研究 wsl 上安装 Docker ,查了一些资料找到官网提供的安装脚本,感觉比较有意思所以拿来分析一波:
- https://get.docker.com
使用 curl 下载脚本
在介绍中有一个命令行用于下载该脚本:
curl -fsSL https://get.docker.com -o install-docker.sh
# -f/--fail 忽略报错,即发生错误时不报错
# -s 不显示下载进度条和报错信息
# -S 当使用 -s 模式时,-S 会在下载失败时会报错
# -L 当返回 30X 状态码时,跟随链接
安装命令 install-docker.sh
sh install-docker.sh --dry-run
# --dry-run 验证要执行的安装步骤而不实际执行脚本
在计算机领域中,--dry-run
是一个常见的命令行参数或选项,用于执行模拟运行而不实际执行任何操作。它通常用于测试或验证操作的影响,以便在实际执行之前先了解结果。
当你在命令行中使用--dry-run
选项时,系统会模拟执行命令或操作,显示将要执行的步骤和可能的结果,但不会真正执行这些步骤。这对于验证复杂的操作或检查潜在的问题非常有用,以便在实际操作之前进行调试或预览。
例如,假设你要删除一个目录及其所有子目录和文件,但你不确定删除操作是否会产生意外结果。你可以使用--dry-run
选项运行删除命令,系统会显示将要删除的文件和目录列表,但不会实际删除它们。这样,你可以先检查列表,确保没有意外的文件将被删除,然后再决定是否执行真正的删除操作。
# 判断是否为 dry_run 模式
is_dry_run() {# 判断 DRY_RUN 变量是否存在,存在返回1,否则返回0[ -z $DRY_RUN ] && return 1 || return 0
}
具体调用逻辑:
if is_dry_run; thenreturn
fi
# 判断变量是否存在
[[ -z $DRY_RUN ]] && echo 'exists' || echo 'not exists'
# -z 用于判断字符串长度是否为0 , 当变量未设置时,默认即为空字符串
# 如果变量不存在,设置为空字符串,相当于什么也没做
DRY_RUN=${DRY_RUN:-}
# 如果变量不存在,设置为字符串hello
DRY_RUN=${DRY_RUN:-hello}
# 删除变量
unset $DRY_RUN
参考资料
- shell 变量的默认值
设置脚本选项:
while [ $# -gt 0 ]; docase "$1" in--channel)CHANNEL="$2"shift;;--dry-run)DRY_RUN=1;;--mirror)mirror="$2"shift;;--version)VERSION="${2#v}"shift;;--*)echo "Illegal option $1";;esacshift $(( $# > 0 ? 1 : 0 ))
done