substring in shell script

SCHASCH

Neuer User
Mitglied seit
12 Jan 2007
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hallo,


ich setzt 7170 mit 29.04.87 version ein und lese Daten über eine pl2303 adapter ein.
(Kernel modul von freetz geladen in die normal firmware)

Das script läuft auf meinem Ubuntu gut.

Habe das Problem dass mein script.sh nicht läuft und ich weiss nicht wie ich ein substring auswerten kann.

#echo "--->read from $SERIALPORT..."
SERIAL_INPUT="";
while read SERIAL_INPUT
do
#echo "test"
#LENNR_RECIEVED=`echo $SERIAL_INPUT |wc -c`;
#READVAL_SERIAL=${SERIAL_INPUT:0:7}
#READVAL_SERIAL=substr($SERIAL_INPUT,0,7)

echo "->$SERIAL_INPUT"
break
done <$SERIALPORT

Wie kann ich das mit diesem substring "
READVAL_SERIAL=${SERIAL_INPUT:0:7}" realisieren?
Kann die busybox(sh) von freetz das?


FEHLER:
seriell_auslesen.sh: line xy: syntax error: Bad substitution

MfG
schasch
 
Zuletzt bearbeitet:

SCHASCH

Neuer User
Mitglied seit
12 Jan 2007
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
>Ja, die Busybox von Freetz kann das.
Danke RalfFriedl


>Und bitte für Programme CODE-Tags verwenden.
OK, sorry!

MfG
schasch
 

Bejobe

Neuer User
Mitglied seit
19 Mai 2005
Beiträge
163
Punkte für Reaktionen
0
Punkte
0
Das klappt auch mit der normalen busybox [1] (siehe untenstehendes kleines Testscript: t=${txt1:$l:1} )
Code:
#!/bin/sh
txt1="abcdefghij"
txt2=""
echo "$txt1"
i=0
len=${#txt1}
while [ $i -le $len ]; do
  l=`expr $len - $i`
  t=${txt1:$l:1}
  txt2=$(echo "$txt2$t")
  i=`expr $i + 1`
done
echo "$txt2"
Bejobe

[1] Der aktuellen Labor-FW der FB 7270
 
Zuletzt bearbeitet:

SCHASCH

Neuer User
Mitglied seit
12 Jan 2007
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hi Bejobe,

nein leider nicht. expr ist in der FB-busybox(29.04.87) nicht drin.
# e[TAB]
echo egrep email.plugin env ether-wake eventadd eventsdump
#

...Aber in der freetz-BB is expr drin, funktioniert dann auch mit einem symlink auf z.B./var/expr

DANKE
 

Bejobe

Neuer User
Mitglied seit
19 Mai 2005
Beiträge
163
Punkte für Reaktionen
0
Punkte
0
29.04.87 ist wohl von der 7170? Ja, das wird so sein, dass die busybox dort leider nur mit weniger Features vorhanden ist. Wobei aber "expr" für mein Beispiel Test-Script natürlich eigentlich unwichtig ist. Wichtig ist darin hier ja nur die Zeile t=${txt1:$l:1}, wobei man $l auch durch eine feste Zahl ersetzen kann. Aber das klappt wohl auch nicht. Ich habe auf der 7170 irgendwie anders abgeholfen... (IIRC mit sed) werde das mal heraussuchen.

Bejobe
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Das klappt auch mit der normalen busybox [1] (siehe untenstehendes kleines Testscript: t=${txt1:$l:1} )
Warum so kompliziert und langsam?
Code:
# cat /tmp/test.sh
#!/bin/sh
txt1="abcdefghij"
txt2=""
echo "$txt1"
i=0
len=${#txt1}
while [ $i -le $len ]; do
  l=`expr $len - $i`
  t=${txt1:$l:1}
  txt2=$(echo "$txt2$t")
  i=`expr $i + 1`
done
echo "$txt2"

# time sh /tmp/test.sh
abcdefghij
jihgfedcba
real    0m 1.16s
user    0m 0.18s
sys     0m 0.92s
Es geht auch so, und expr braucht man auch nicht:
Code:
# cat /tmp/test2.sh
#!/bin/sh
txt1="abcdefghij"
txt2=""
echo "$txt1"
i=${#txt1}
while [ $i -gt 0 ]; do
  i=$((i - 1))
  txt2="$txt2${txt1:$i:1}"
done
echo "$txt2"

# time sh /tmp/test2.sh
abcdefghij
jihgfedcba
real    0m 0.03s
user    0m 0.01s
sys     0m 0.02s
 

SCHASCH

Neuer User
Mitglied seit
12 Jan 2007
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
@RalfFriedl
danke

INFO:geht auch nur mit der freetz-BB-sh
 

Bejobe

Neuer User
Mitglied seit
19 Mai 2005
Beiträge
163
Punkte für Reaktionen
0
Punkte
0
SCHASCH schrieb:
INFO:geht auch nur mit der freetz-BB-sh
Das stimmt, weil eben auch txt2="$txt2${txt1:$i:1}" nicht geht auf der 7170.

Das Folgende geht aber - auch mit der Busybox der 7170 (ersetzt "txt2=${txt1:$von:$anz}" mit hilfe von sed):
Code:
#!/bin/sh
#-------------------
txt1="abcdefghij"
echo "$txt1"
#-------------------
#entspricht: txt2=${txt1:$von:$anz}
von=1 # 1. Zeichen = 0
anz=5 # 
#-------------------
len=${#txt1}
bis=$((len - von - anz ))
txt2=$(echo "$txt1" | sed -e "s/^.\{$von\}//" | sed -e "s/.\{$bis\}$//" )
#-------------------
echo "$txt2"
HTH

Bejobe
 
Zuletzt bearbeitet:

SCHASCH

Neuer User
Mitglied seit
12 Jan 2007
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Super Lösungen!!

Danke euch beiden!
 

Bejobe

Neuer User
Mitglied seit
19 Mai 2005
Beiträge
163
Punkte für Reaktionen
0
Punkte
0
Danke euch beiden!
Euch beiden? Es ergab sich doch im Laufe des Threads, dass du das Script auf einer FB 7170 laufen lassen willst, da geht das von RalfFriedl nicht... Oder habe ich es falsch verstanden?

Bejobe
 

SCHASCH

Neuer User
Mitglied seit
12 Jan 2007
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Euch beiden? Es ergab sich doch im Laufe des Threads, dass du das Script auf einer FB 7170 laufen lassen willst, da geht das von RalfFriedl nicht... Oder habe ich es falsch verstanden?

Bejobe
ja, richtig verstanden! Als ich den Thread gestartet hatte, hatte ich noch keine freetz-BB-bin.

..aber danke euch beiden für die Hilfe!
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
233,379
Beiträge
2,033,449
Mitglieder
351,971
Neuestes Mitglied
Levo88