Update net.sh

Add -o to output report in ANSI/JSON/Text format
This commit is contained in:
xykt
2025-04-23 18:38:34 +08:00
committed by GitHub
parent b171b8db18
commit 66c4f0d37e

81
net.sh
View File

@@ -1,5 +1,5 @@
#!/bin/bash
script_version="v2025-04-22"
script_version="v2025-04-23"
ADLines=25
check_bash(){
current_bash_version=$(bash --version|head -n 1|awk '{for(i=1;i<=NF;i++) if ($i ~ /^[0-9]+\.[0-9]+(\.[0-9]+)?/) print $i}')
@@ -132,6 +132,7 @@ declare mode_no=0
declare mode_yes=0
declare mode_skip=""
declare mode_menu=0
declare mode_output=0
declare ping_test_count=10
declare pingww_test_count=12
declare netdata
@@ -140,20 +141,23 @@ shelp_lines=(
"Interactive Interface: bash <(curl -sL Net.Check.Place) -EM"
"交互界面: bash <(curl -sL Net.Check.Place) -M"
"Parameters 参数运行: bash <(curl -sL Net.Check.Place) [-4] [-6] [-f] [-h] [-j] [-l language] [-n] [-y] [-E] [-L] [-M] [-P] [-R province] [-S chapters]"
" -4 Test IPv4 测试IPv4"
" -6 Test IPv6 测试IPv6"
" -f Show full IP on reports 报告展示完整IP地址"
" -h Help information 帮助信息"
" -j JSON output JSON输出"
" -l cn|en Specify script language 指定报告语言"
" -n No OS or dependencies check 跳过系统检测及依赖安装"
" -y Install dependencies without interupt 自动安装依赖"
" -E Specify English Output 指定英文输出"
" -L Low data mode 低数据模式(跳过测速环节)"
" -M Run with Interactive Interface 交互界面方式运行"
" -P Ping mode 三网延迟模式"
" -R [Province] Route mode [Specify Province] 三网完整路由模式[可选指定省份]"
" -S 1234567 Skip sections by number 跳过相应章节")
" -4 Test IPv4 测试IPv4"
" -6 Test IPv6 测试IPv6"
" -f Show full IP on reports 报告展示完整IP地址"
" -h Help information 帮助信息"
" -j JSON output JSON输出"
" -l cn|en Specify script language 指定报告语言"
" -n No OS or dependencies check 跳过系统检测及依赖安装"
" -o /path/to/file.ansi Output ANSI report to file 输出ANSI报告至文件"
" /path/to/file.json Output JSON result to file 输出JSON结果至文件"
" /path/to/file.anyother Output plain test report to file 输出纯文本报告至文件"
" -y Install dependencies without interupt 自动安装依赖"
" -E Specify English Output 指定英文输出"
" -L Low data mode 低数据模式(跳过测速环节)"
" -M Run with Interactive Interface 交互界面方式运行"
" -P Ping mode 三网延迟模式"
" -R [Province] Route mode [Specify Province] 三网完整路由模式[可选指定省份]"
" -S 1234567 Skip sections by number 跳过相应章节")
shelp=$(printf "%s\n" "${shelp_lines[@]}")
set_language(){
case "$YY" in
@@ -163,6 +167,8 @@ swarn[3]="ERROR: Dependent programs are missing. Please run as root or install s
swarn[4]="ERROR: Parameter -4 conflicts with -i or -6!"
swarn[6]="ERROR: Parameter -6 conflicts with -i or -4!"
swarn[9]="ERROR: It is not allowed to skip all funcions!"
swarn[10]="ERROR: Output file already exist!"
swarn[11]="ERROR: Output file is not writable!"
swarn[21]="ERROR: Wrong province code or name!"
swarn[40]="ERROR: IPv4 is not available!"
swarn[60]="ERROR: IPv6 is not available!"
@@ -249,6 +255,8 @@ swarn[3]="错误未安装依赖程序请以root执行此脚本或者安
swarn[4]="错误:参数-4与-i/-6冲突"
swarn[6]="错误:参数-6与-i/-4冲突"
swarn[9]="错误: 不允许跳过所有功能!"
swarn[10]="错误:输出文件已存在!"
swarn[11]="错误:输出文件不可写!"
swarn[21]="错误: 错误的省份名称或代码!"
swarn[40]="错误IPV4不可用"
swarn[60]="错误IPV6不可用"
@@ -1187,7 +1195,7 @@ local max_retries=10
local retry_delay=5
local retry_count=0
while [[ $retry_count -lt $max_retries ]];do
response=$(nexttrace -p 80 -q 10 -"$ipv" --"$rmode" --raw --psize 1400 "$domain" 2>/dev/null)
response=$(timeout 60 nexttrace -p 80 -q 8 -"$ipv" --"$rmode" --raw --psize 1400 "$domain" 2>/dev/null)
[[ $response != *"*please try again later*"* && $response == *"traceroute to"* ]]&&break
retry_count=$((retry_count+1))
[[ $retry_count -lt $max_retries ]]&&sleep "$retry_delay"
@@ -1307,7 +1315,7 @@ local max_retries=10
local retry_delay=5
local retry_count=0
while [[ $retry_count -lt $max_retries ]];do
response=$(mtr -"$ipv" --"$rmode" --no-dns -y 0 -P 80 -c 10 -C -Z 1 -G 1 -s 1400 "$domain" 2>/dev/null)
response=$(timeout 60 mtr -"$ipv" --"$rmode" --no-dns -y 0 -P 80 -c 8 -C -Z 1 -G 1 -s 1400 "$domain" 2>/dev/null)
[[ $response != *"*mtr:*"* && $response == *"OK,"* ]]&&break
retry_count=$((retry_count+1))
[[ $retry_count -lt $max_retries ]]&&sleep "$retry_delay"
@@ -1695,7 +1703,7 @@ local max_retries=10
local retry_delay=5
local retry_count=0
while [[ $retry_count -lt $max_retries ]];do
output=$(nexttrace -p 80 -q 10 -"$ipv" "$tmode" --psize 1400 "$domain" 2>/dev/null)
output=$(timeout 60 nexttrace -p 80 -q 8 -"$ipv" "$tmode" --psize 1400 "$domain" 2>/dev/null)
[[ $output != *"*please try again later*"* && $output == *"traceroute to"* ]]&&break
retry_count=$((retry_count+1))
[[ $retry_count -lt $max_retries ]]&&sleep "$retry_delay"
@@ -2484,14 +2492,14 @@ get_opts(){
local args=()
while [[ $# -gt 0 ]];do
case "$1" in
-[SlR])args+=("$1")
-[loSR])args+=("$1")
if [[ $# -gt 1 && $2 != -* ]];then
args+=("$2")
shift
fi
shift
;;
-[SlR]*)ERRORcode=1
-[loSR]*)ERRORcode=1
shift
;;
-[46fhjnyELMP]*)local opt="$1"
@@ -2540,12 +2548,34 @@ shift
shift
;;
-l)shift
[[ $1 == -* ]]&&ERRORcode=1&&break
YY=$(echo "$1"|tr '[:upper:]' '[:lower:]')
shift
;;
-n)mode_no=1
shift
;;
-o)shift
[[ $1 == -* ]]&&{
ERRORcode=1
break
}
mode_output=1
outputfile="$1"
[[ -z $outputfile ]]&&{
ERRORcode=1
break
}
[[ -e $outputfile ]]&&{
ERRORcode=10
break
}
touch "$outputfile" 2>/dev/null||{
ERRORcode=11
break
}
shift
;;
-y)mode_yes=1
shift
;;
@@ -2805,10 +2835,19 @@ local net_report=$(show_head
[[ $mode_skip != *"6"* && $2 -eq 4 ]]&&show_speedtest
[[ $mode_skip != *"7"* ]]&&show_iperf
show_tail)
[[ mode_json -eq 1 ]]&&save_json $2
[[ mode_json -eq 1 || mode_output -eq 1 ]]&&save_json $2
[[ mode_json -eq 0 ]]&&echo -ne "\r$net_report\n"
[[ mode_json -eq 1 ]]&&echo -ne "\r$netdata\n"
echo -ne "\r\n"
if [[ mode_output -eq 1 ]];then
case "$outputfile" in
*.ansi)echo "$net_report" >>"$outputfile" 2>/dev/null
;;
*.json)echo "$netdata" >>"$outputfile" 2>/dev/null
;;
*)echo -e "$net_report"|sed 's/\x1b\[[0-9;]*[mGKHF]//g' >>"$outputfile" 2>/dev/null
esac
fi
}
generate_random_user_agent
adapt_locale