Einstieg in die Bash-Programmierung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Don83
Beiträge: 57
Registriert: 03.05.2009 18:02:27

Einstieg in die Bash-Programmierung

Beitrag von Don83 » 25.07.2014 15:19:46

Halli Hallo,

ich beherrsche eigentlich schon recht ordentlich Java Programmierung als auch einige Skriptsprachen. Bash war jedoch etwas vor dem ich mich immer gesträubt hatte.

Ich versuche mir nun zumindest die wichtigsten Befehle bzw. Syntax hierzu einzuprägen.

Einer meiner Versuche hatte wie folgend ausgehen:

Code: Alles auswählen

for((i=0;i<10;i++));do if [$i lt 4]; then echo "hello $i"; fi; done;
Rückmeldung hierzu

Code: Alles auswählen

-bash: [0: command not found
-bash: [1: command not found
-bash: [2: command not found
-bash: [3: command not found
-bash: [4: command not found
-bash: [5: command not found
-bash: [6: command not found
-bash: [7: command not found
-bash: [8: command not found
-bash: [9: command not found
Naja die Schleife geht ja schonmal. Aber irgendwie wird wohl der wert nicht ordentlich an die Variable i übergeben, oder was ist das Problem ? Was das Programm tun soll wird hoffentlich erkenntlich. Einfach von 1-10 hochzählen und dabei jeweils prüfen ob die Zahl kleiner als 4 ist falls ja ein hello + Zahl ausgeben.

Könnte mir wer sagen worans hakt?

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

Re: Einstieg in die Bash-Programmierung

Beitrag von peschmae » 25.07.2014 15:30:44

Das "[" in Shells ist manchmal auch ein eigenständiges Programm (/usr/bin/[ ). Im Normalfall heisst das auch test, falls man das so mal braucht. In der Bash gibts zusätzlich einen built-in Befehl Namens [, der benutzt wird. In jedem Fall brauchst du nach dem [ einen Leerschlag.

Also

Code: Alles auswählen

for ((i = 0; i < 10; i++)); do
  if [ $i -lt 4 ]; then 
    echo "hello $i"
  fi
done
Alternativ ginge auch (aber weniger üblich) mit if test $i -lt 4; then. Denn das if nimmt als Argument ein beliebiges Programm - wenn das Programm 0 zurückgibt, dann gilt das als "true", ansonsten "false" (genau das Gegenteil von anderen Programmiersprachen, aber der traditionelle Erfolgs-Rückgabewert bei Unix ist halt 0).

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

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Einstieg in die Bash-Programmierung

Beitrag von Phineas » 26.07.2014 00:01:08

Von Java kommend, würde ich diese Syntax bevorzugen:

Code: Alles auswählen

for((i=0;i<10;i++));do if (( i < 4 )); then echo "hello $i"; fi; done

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: Einstieg in die Bash-Programmierung

Beitrag von wanne » 26.07.2014 10:46:21

Noch so als Anmerkung: Wenn du von Java her kommst wird dir csh oder besser ein nachfolger (tcsh,zsh) wesentlich angenehmer sein. Ist aber im endeffekt so, dass die teile, die da drin anders sind wieder nicht in einer bash laufen. Da kann man gleich perl oder ähnliches nehmen.
Ansosnten gibt's (( ausschließlich in der bash. Selbst die ganzen shells, die kompatibel sein wollen haben das nicht. Ich würde mir das nicht unbedingt angewöhnen.
rot: Moderator wanne spricht, default: User wanne spricht.

DeletedUserReAsG

Re: Einstieg in die Bash-Programmierung

Beitrag von DeletedUserReAsG » 26.07.2014 11:17:03

Wenn du hauptsächlich Bash benutzt, würdest du dir ihre Spezialitäten nicht angewöhnen und nutzen, weil andere Shells, die du nicht nutzt, sie nicht haben? Das verstehe ich nicht.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: Einstieg in die Bash-Programmierung

Beitrag von wanne » 26.07.2014 12:12:07

Wie gesagt, wenn er für sich programmiert würde ich ihm eher was ganz anderes empfehlen.
Sowas ließt sich für nen Java-Programmier einfach viel besser:

Code: Alles auswählen

#!/bin/tcsh
set j = 1;
while ( $j <= 5 )
  printf "Welcome $j times\n";
  @ j++;
end
Der vorteil von der POSIX-Shell ist halt, dass man sowas relativ einfach weitergeben kann. Sei's heir im forum oder in irgend einem configure script zu nem Programm.
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten