#!/bin/bash # ============================================================================ # B站短链接转长链接脚本 # ============================================================================ # 用途:将B站短链接(b23.tv)转换为完整视频链接 # 支持:短链接、BV号、AV号 # ============================================================================ set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # 获取长链接(核心逻辑) get_long_url() { local input=$1 # 如果是BV号格式(BV开头),直接返回完整URL if [[ $input =~ ^BV[a-zA-Z0-9]+$ ]]; then echo "https://www.bilibili.com/video/$input" return 0 fi # 构造短链接URL if [[ $input =~ ^https?:// ]]; then local short_url="$input" elif [[ $input =~ ^b23\.tv/ ]]; then local short_url="https://$input" else local short_url="https://b23.tv/$input" fi # 获取重定向地址 local redirect=$(curl -sLI "$short_url" 2>/dev/null | grep -i '^location:' | head -1 | sed 's/location: //I' | tr -d '\r' || echo "") if [ -z "$redirect" ]; then echo "错误:无法获取重定向地址" >&2 return 1 fi # 清理URL(移除tracking参数) echo "$redirect" | sed 's/\?.*//' | sed 's/&/\&/g' } # 提取BV号 extract_bv() { local url=$1 echo "$url" | grep -oP 'BV[a-zA-Z0-9]+' | head -1 } # 主函数 main() { if [ $# -eq 0 ]; then echo "用法: $0 <短链接或BV号>" echo "" echo "示例:" echo " $0 https://b23.tv/lid6E0m" echo " $0 b23.tv/lid6E0m" echo " $0 BV11t64BJEDZ" echo " $0 lid6E0m" exit 1 fi local input=$1 local long_url=$(get_long_url "$input") if [ $? -ne 0 ]; then exit 1 fi local bv=$(extract_bv "$long_url") # 输出结果 echo "==================================" echo -e "${GREEN}B站链接转换结果${NC}" echo "==================================" echo "输入: $input" echo "长链接: $long_url" echo "BV号: ${bv:-未找到}" echo "==================================" # 单独输出长链接(便于脚本调用) echo "" echo "$long_url" } main "$@"