Document installation and validate shell scripts
This commit is contained in:
68
install.sh
Normal file
68
install.sh
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
||||
SOURCE_SCRIPT="${SCRIPT_DIR}/iptables-forward.sh"
|
||||
TARGET_BIN=${INSTALL_TARGET:-/usr/local/bin/iptables-forward}
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
用法:
|
||||
sudo ./install.sh
|
||||
sudo ./install.sh --uninstall
|
||||
|
||||
说明:
|
||||
- 仅创建符号链接,不复制源码。
|
||||
- 默认链接到 /usr/local/bin/iptables-forward。
|
||||
- 可通过 INSTALL_TARGET 自定义目标路径。
|
||||
USAGE
|
||||
}
|
||||
|
||||
require_root() {
|
||||
if (( EUID != 0 )); then
|
||||
printf '请使用 root 或 sudo 执行安装脚本。\n' >&2
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
install_link() {
|
||||
[[ -f ${SOURCE_SCRIPT} ]] || {
|
||||
printf '未找到入口脚本: %s\n' "${SOURCE_SCRIPT}" >&2
|
||||
exit 1
|
||||
}
|
||||
mkdir -p "$(dirname -- "${TARGET_BIN}")"
|
||||
ln -sfn "${SOURCE_SCRIPT}" "${TARGET_BIN}"
|
||||
chmod 755 "${SOURCE_SCRIPT}"
|
||||
printf '已创建链接: %s -> %s\n' "${TARGET_BIN}" "${SOURCE_SCRIPT}"
|
||||
}
|
||||
|
||||
uninstall_link() {
|
||||
if [[ -L ${TARGET_BIN} || -e ${TARGET_BIN} ]]; then
|
||||
rm -f "${TARGET_BIN}"
|
||||
printf '已删除链接: %s\n' "${TARGET_BIN}"
|
||||
else
|
||||
printf '未发现已安装链接: %s\n' "${TARGET_BIN}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
case ${1:-install} in
|
||||
--help|-h)
|
||||
usage
|
||||
;;
|
||||
install)
|
||||
require_root
|
||||
install_link
|
||||
;;
|
||||
--uninstall|uninstall)
|
||||
require_root
|
||||
uninstall_link
|
||||
;;
|
||||
*)
|
||||
usage >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user