"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Problem mit bash script

UnleashThebeast 10.02.2018 - 15:03 1983 3
Posts

UnleashThebeast

Mr. Midlife-Crisis
Avatar
Registered: Dec 2005
Location: 127.0.0.1
Posts: 3446
//Edit: Weil ich ein Schoitl bin und beim Code zusammenkopieren nicht auf die Benamung der Variablen aufpass... Jesusmaria...


Hallo,

folgendes script:

Code: BASH
#!/usr/bin/bash



# DB connection
db_host=xxx
db_user=xxx
db_passwd=xxx

# DB database and table
db_name=xxx
db_table=xxx


##################################################
############## HERE BE DRAGONS THEN ##############
##################################################

# create timestamp for database
timestamp=`date +"%Y-%m-%d %H:%M:%S"`

# temp file holding output to snip it
user=$USER
if test -z $user; then
  user=$USERNAME
fi
log=/tmp/$user/speedtest-mysql.log

# Local functions
str_extract() {
 pattern=$1
 # Extract
 res=`grep "$pattern" $log | sed "s/$pattern//g"`
 # Drop trailing ...
 res=`echo $res | sed 's/[.][.][.]//g'`
 # Trim
 res=`echo $res | sed 's/^ *//g' | sed 's/ *$//g'`
 echo $res
}

mkdir -p `dirname $log`

# run speedtest
/usr/local/bin/speedtest > $log

# parse the output
from=`str_extract "Testing from "`
from_ip=`echo $from | sed 's/.*(//g' | sed 's/).*//g'`
from=`echo $from | sed 's/ (.*//g'`

server=`str_extract "Hosted by "`
server_ping=`echo $server | sed 's/.*: //g'`
server=`echo $server | sed 's/: .*//g'`
server_dist=`echo $server | sed 's/.*\\[//g' | sed 's/\\].*//g'`
server=`echo $server | sed 's/ \\[.*//g'`

download=`str_extract "Download: "`
upload=`str_extract "Upload: "`
share_url=`str_extract "Share results: "`

# Send to MySQL

value1=`echo $ping | cut -d" " -f1`
value2=`echo $download | cut -d" " -f1`
value3=`echo $upload | cut -d" " -f1` 

sql="INSERT INTO $db_table (timestamp,ping,download,upload,server) VALUES ('$timestamp','$ping','$download','$upload','$server');"

echo "$sql" | mysql -u$db_user -p$db_passwd -h$db_host $db_name

Hab hier ein Frankensteinmonster aus zusammenkopiertem code von ich glaub 5 Leuten.
Soweit funktioniert auch fast alles, nur $ping liefert mir immer "0" in die DB.
speedtest liefert mir den ping aber richtig mit :/.
Code:
pi@speedtestpi:~ $ speedtest
Retrieving speedtest.net configuration...
Testing from UPC Austria (80.110.109.207)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by NEXT LAYER GmbH (Vienna) [6.40 km]: 33.5 ms
Testing download speed................................................................................
Download: 90.28 Mbit/s
Testing upload speed................................................................................................
Upload: 9.95 Mbit/s
pi@speedtestpi:~ $

hilfe? :D
Bearbeitet von UnleashThebeast am 10.02.2018, 15:12

Kirby

0x19
Avatar
Registered: Jun 2017
Location: Lesachtal/Villac..
Posts: 822
schon mal mit
ping -qc1 $server 2>&1 | awk -F'/' 'END{ print (/^rtt/? "OK "$5" ms":"FAIL") }'
probiert?

Longbow

Here to stay
Avatar
Registered: Feb 2003
Location: Homeoffice
Posts: 5128
du schreibst $ping in die db, deklarierst aber vorher $server_ping?

COLOSSUS

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11890
Goenn' dir ein `set -u` ganz oben in deinem Script - dann verstirbt der Interpreter beim Aufloesen von undeklarierten Variablenbezeichnern. Das wird, schaetze ich, die schlimmsten Probleme darin offsichtlich machen.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz