syntax error: bad for loop variable

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

syntax error: bad for loop variable

Beitrag von Spike1986 » 06.03.2014 19:10:20

Habe ein Shell-Script (.sh) für ein Receiver seit dem Update erhalte ich die Meldung.

Code: Alles auswählen

	for (( pos=0 ; pos<strlen ; pos++ )); do
		c=${string:$pos:1}
		case "$c" in
			[-_.~a-zA-Z0-9] ) o="${c}" ;;
			* )               printf -v o '%%%02x' "'$c"
		esac
		encoded+="${o}"
	done
	echo "${encoded}"
	REPLY="${encoded}"
da erhalte ich die Fehlermeldung "syntax error: bad for loop variable" line 136

line 136 ist:

Code: Alles auswählen

for (( pos=0 ; pos<strlen ; pos++ )); do

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: syntax error: bad for loop variable

Beitrag von peschmae » 06.03.2014 21:12:39

Seit welchem update? Debian hat mal den Symlink auf /bin/sh umgebogen von bash nach dash (die ist etwas weniger fett als bash, und etwas posix-standardkonformer oder sowas in die Richtung). Das ist allerdings schon eine Weile her - gefühlt ein paar Jahre. Dash kennt vermutlich dieses for-loop Konstrukt nicht.

Du könntest also statt /bin/sh explizit /bin/bash verwenden. Oder stattdessen auf for pos in $(seq 0 $strlen); do ... umsteigen.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: syntax error: bad for loop variable

Beitrag von Cae » 07.03.2014 00:18:05

(( ... )) ist Bash-Syntax, daran kann's schon mal liegen. Umstieg auf /bin/sh ist nicht moeglich, da ${a:b:c} und a+=b ebenfalls Bashismen sind.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: syntax error: bad for loop variable

Beitrag von Spike1986 » 07.03.2014 00:35:14

Mhh okay. Habe gerade was gelesen das es sich um ein Bash handelt.
Kenn mich mit Scripten nicht so aus dann muss ich eine Alternative Suchen.

Danke schonmal

Edit:

Habe mal was probiert.

Code: Alles auswählen

# Vorbereitung fuer http Ausgabe auf Receiver
urlencode() {
	if [ "$1" = alle ]; then
		string="$list"
	fi
	
	if [ "$1" = eins ]; then
		string="$LIST"
	fi
	
	if [ "$1" = alte ]; then
		string="$BQv"
	fi
	
	if [ "$1" = bq ]; then
		string="Senderlisten-Update/Installation"
	fi
	
	if [ "$1" = apps ]; then
		string="APPS-Update/Installation"
	fi
	
	if [ "$1" = cron ]; then
		string="Cron-Update/Installation"
	fi
	
	if [ "$1" = scripte ]; then
		string="Scripte-Update/Installation"
	fi

	if [ "$1" = uptime ]; then
		string="$uptime"
	fi
	
	args=$(echo "$string" | sed -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g')

}

GUIneustart() {
wget -O /dev/null "http://localhost:80/web/message?text=$( urlencode $1 "$args" )%20fertig!%20Soll%20Receiver%20neu%20gestartet%20werden?%20$( urlencode $1 "$args" )%20erst%20nach%20neu%20start%20verfügbar!&type=0"
}

GUIneustart apps
Muss das aber noch testen

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: syntax error: bad for loop variable

Beitrag von Spike1986 » 07.03.2014 19:12:57

So habe jetzt ein 90% Lösung gefunden.
Nur habe ich das Problem wenne die uptime Variable z.b "06.03.2014 um 16:59" ist wird diese nicht angezeigt.

Code: Alles auswählen

urlencode() {
	if [ "$1" = alle ]; then
		string="$list"
	fi
	
	if [ "$1" = eins ]; then
		string="$LIST"
	fi
	
	if [ "$1" = alte ]; then
		string="$BQv"
	fi
	
	if [ "$1" = bq ]; then
		string="Senderliste-Update/Installation"
	fi
	
	if [ "$1" = apps ]; then
		string="APPS-Update/Installation"
	fi
	
	if [ "$1" = cron ]; then
		string="Cron-Update/Installation"
	fi
	
	if [ "$1" = scripte ]; then
		string="Scripte-Update/Installation"
	fi

	if [ "$1" = uptime ]; then
		string="$uptime"
	fi
	
	local arg
	arg="$string"
	while [[ "$arg" =~ ^([0-9a-zA-Z/:_\.\-]*)([^0-9a-zA-Z/:_\.\-])(.*) ]] ; do
		echo -n “${BASH_REMATCH[1]}”
		printf “%%%X” “‘${BASH_REMATCH[2]}’”
		arg=”${BASH_REMATCH[3]}”
	done
	# the remaining part
	#echo -n “$arg”
}

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: syntax error: bad for loop variable

Beitrag von Cae » 07.03.2014 22:06:03

Die ganzen Ticks und Anfuehrungzeichen bei printf und Umgebung sind keine ASCII-Ticks/Anfuehrungszeichen, sondern die typografisch korrekten Unicode-Entsprechungen. Vermutlich hat sie ein (ungeeigeneter) Editor eingefuegt; die Shell kann damit jedenfalls nichts anfangen.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: syntax error: bad for loop variable

Beitrag von Spike1986 » 07.03.2014 22:13:44

Cae hat geschrieben:Die ganzen Ticks und Anfuehrungzeichen bei printf und Umgebung sind keine ASCII-Ticks/Anfuehrungszeichen, sondern die typografisch korrekten Unicode-Entsprechungen. Vermutlich hat sie ein (ungeeigeneter) Editor eingefuegt; die Shell kann damit jedenfalls nichts anfangen.

Gruss Cae

Hört sich kompliziert an. Habe denn urlencode bei einer google suche gefunden.

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: syntax error: bad for loop variable

Beitrag von Spike1986 » 07.03.2014 23:52:16

Spike1986 hat geschrieben:
Cae hat geschrieben:Die ganzen Ticks und Anfuehrungzeichen bei printf und Umgebung sind keine ASCII-Ticks/Anfuehrungszeichen, sondern die typografisch korrekten Unicode-Entsprechungen. Vermutlich hat sie ein (ungeeigeneter) Editor eingefuegt; die Shell kann damit jedenfalls nichts anfangen.

Gruss Cae

Hört sich kompliziert an. Habe denn urlencode bei einer google suche gefunden.

Edit: Lösung

Code: Alles auswählen

	if [ ! -x "/usr/bin/hexdump" ]; then
		echo "hexdump not found, nutze sed Befehl"
		encodedurl=$(echo "$string" | sed 's/ /%20/g;s/!/%21/g;s/"/%22/g;s/#/%23/g;s/\$/%24/g;s/\&/%26/g;s/'\''/%27/g;s/(/%28/g;s/)/%29/g;s/:/%3A/g')
	else
		encodedurl=`
		echo $string | hexdump -v -e '1/1 "%02x\t"' -e '1/1 "%_c\n"' |
		LANG=C awk '
		$1 == "20"                    { printf("%s",   "+"); next } # space becomes plus
		$1 ~  /0[adAD]/               {                      next } # strip newlines
		$2 ~  /^[a-zA-Z0-9.*()\/-]$/  { printf("%s",   $2);  next } # pass through what we can
									{ printf("%%%s", $1)        } # take hex value of everything else
	'`
	fi
    echo "${encodedurl}"
	REPLAY="${encodedurl}"

Antworten