• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Shellskript, dass vom 1.Parameter bis 2.Parameter zählt

Hi leute habe ein skript zum obigen them geschrieben, und soll die Zahlen absteigend ausgegebenm, nur ich bekomme diese aufsteigend:

Code:
#! /bin/bash
#set -x

#Mit $1 und $2 rechnen
x=$1
y=$2




if  test $# -ne 2 	#Überprüfung auf Existenz der Parameter,-ne 2 nicht gleich 2 dann
then
echo "Beim aufruf müssen zwei Parameter mitgegeben werden"	#kommt diese Meldung

else 
echo " Parameter 1: $1 Parameter 2: $2 " #sonst werden die Werte der Parameter ausgegeben

if [ ! `echo $1 | grep -v "[^0-9]"` ]
then
echo "Es waren keine Zahlen"
exit

elif [ ! `echo $2 | grep -v "[^0-9]"` ]
then
echo "Es waren keine Zahlen"
exit




if test $1 -ge 99	#falls $1 >99
then
  echo "zu groß"	#zu groß( aufgabenstellung sagt, sollen von 1-99 sein		#$1=y $2=x
  echo "es dürfen nur zahlen von 1-99 eingegeben werden" #meldung

elif test $2 -ge 99	#falls $2 >99
  then 
echo "zu groß"	#Meldung
echo "es dürfen nur zahlen von 1-99 eingegeben werden" #zu groß



fi #beendigug der if - abfrage
fi
fi
 
  




      while [ $x -le $y ] #solange Parameter1<Parameter2
	do
	x=$[$x+1] #$1
	z=$[$y-$x] #um hochzuzählen wurden den Parametern variablen gegeben bzw.Substitution , $1=x, $2=y
		  #immer +1 bei x solange while schleife true ist
      echo $z
     	#ausgabe wert
	if [ $x -gt $y ] #wenn der Inhalt bzw. der Parameter $1, der in x reingeschrieben wird > $2, der in y steht ist
	  then
	  echo " $x ist groesser als $y" #Meldung wird ausgegeben
	  exit #Beenden des Programms
	 
      

fi #beendigung der if-Abfrage
done #beendigung der while Schleife
 
Mal abgesehen davon, dass das Script so wegen Syntaxfehlern nicht funktionieren wird, sofern man das mangels Einrückung etc. sehen kann.

Warum zählst du nicht anders herum? Also #
Code:
while $y -gt $x; do
......echo "----"
done

Gewöhne dir an deinen Quellcode zu formatieren, dann ist er einfacher zu lesen.
 
Danke leute hab es hinbekommen:


Code:
#! /bin/bash
#set -x

#Mit $1 und $2 rechnen
x=$1
y=$2




if  test $# -ne 2 	#Überprüfung auf Existenz der Parameter,-ne 2 nicht gleich 2 dann
    then
    echo "Beim aufruf müssen zwei Parameter mitgegeben werden"	#kommt diese Meldung

     else 
    echo " Parameter 1: $1 Parameter 2: $2 " #sonst werden die Werte der Parameter ausgegeben

          if [ ! `echo $1 | grep -v "[^0-9]"` ]
             then
            echo "Es waren keine Zahlen"
            exit

                    elif [ ! `echo $2 | grep -v "[^0-9]"` ]
                    then
                    echo "Es waren keine Zahlen"
                    exit




                          if test $1 -ge 99	#falls $1 >99
                          then
                         echo "zu groß"	#zu groß( aufgabenstellung sagt, sollen von 1-99 sein		#$1=y $2=x
                         echo "es dürfen nur zahlen von 1-99 eingegeben werden" #meldung

                                  elif test $2 -ge 99	#falls $2 >99
                                 then 
                                 echo "zu groß"	#Meldung
                                 echo "es dürfen nur zahlen von 1-99 eingegeben werden" #zu groß



                       fi #beendigug der if - abfrage
fi
fi
 
  




      while [ $y -gt $x ] #solange Parameter1<Parameter2
	do
	
	y=$[$y-1] #um hochzuzählen wurden den Parametern variablen gegeben bzw.Substitution , $1=x, $2=y
	echo $y	  #immer +1 bei x solange while schleife true ist
      
     	#ausgabe wert
	if [ $x -gt $y ] 
	  then
	  echo " $x ist groesser als $y" #Meldung wird ausgegeben
	  exit #Beenden des Programms
	 
      

fi #beendigung der if-Abfrage
done #beendigung der while Schleife
 
Die If Abfrage ob x > y ist gehört nicht in die while Schleife, da die while Schleife nur und solange y > x ist ausgeführt wird. Die if Abfrage müsste also vor die while Schleife.
 
Danke ,kommt es eigentlich nicht auf das gleich hinaus?
Wenn er die while schleife nicht erfüllt, dann macht er doch automatisch die if-abfrage danach.
Aber du hast schon recht
 
Was ich nicht verstehe ist, warum er trotzdem zählt, obwohl ich zahlen größer 99 eingebe, habe doch die Bedingung integriet?
 
Du solltest nach
Code:
exit
mit fi abschliessen und Schleife alleine laufen lassen, sprich nach der Überprüfung der Parameter.
Code:
if [ $2 -gt 99 ]; then
   echo "Möp zu gross"
   exit 1
fi
 
Stimmt hast du recht ich habs nochmal durchgespielt und hab es gemerkt.
Nun möchte ich aber die Ausgabe der Zahlen formatieren, d.h. ich möchte die Ausgabe so gestalten , dass ich pro zeile 3 Zahlen habe immer.
Mit ist klar dass ich dafür einen Zähler brauche der bis 3 zählt und jedesmal einen Zeilenumbruch macht und die vierte Zahl in der neuen Zeile schriebt.,
Ich bin halt am grübeln wie ich so etwas schreibe.
 
Bin jetzt fast mit der Ausgabe fertig, nur er teilt mit die Ausgabe nicht auf, d.h. pro Zeile 3 Zahlen und ab der vierten Zeilenumbruch:


siehe mein code:

Code:
#! /bin/bash
#set -x

#Mit $1 und $2 rechnen
x=$1
y=$2




if  test $# -ne 2    #Überprüfung auf Existenz der Parameter,-ne 2 nicht gleich 2 dann
    then
    echo "Beim aufruf müssen zwei Parameter mitgegeben werden"   #kommt diese Meldung

     else
    echo " Parameter 1: $1 Parameter 2: $2 " #sonst werden die Werte der Parameter ausgegeben
fi
          if [ ! `echo $1 | grep -v "[^0-9]"` ]
             then
            echo "Es waren keine Zahlen"
            exit

                    elif [ ! `echo $2 | grep -v "[^0-9]"` ]
                    then
                    echo "Es waren keine Zahlen"
                    exit


	fi

                          if [ $1 -gt 99 ]   #falls $1 >99
                          then
                         echo "zu groß"   #zu groß( aufgabenstellung sagt, sollen von 1-99 sein      #$1=y $2=x
                         echo "es dürfen nur zahlen von 1-99 eingegeben werden" #meldung
			  exit
			
                                  elif [ $2 -gt 99 ]   #falls $2 >99
                                 then
                                 echo "zu groß"   #Meldung
                                 echo "es dürfen nur zahlen von 1-99 eingegeben werden" #zu groß
				  exit
  
                       fi
                  
		  

 if [ $x -gt $y ]
     then
     echo " $x ist groesser als $y" #Meldung wird ausgegeben
     exit #Beenden des Programms

 
fi

      while [ $y -gt $x ] #solange Parameter1<Parameter2
   do
    
    for ((i=0; i<=3; i++))

    do
    y=$[$y-1]
    echo -n  $y  
    
    
   
 
        

     
done
echo
done
 
Hi habs hinbekommen, echt ihr bringt mich zum Nachdenken und gibt mir gute Hilfen danke euch:

Siet ich in diesem Forum Mitgleid bin, habe ich vieles zu der Shellsprogrammierung dazugelernt:

mein Code:

Code:
#! /bin/bash
#set -x

#Mit $1 und $2 rechnen
x=$1
y=$2




if  test $# -ne 2    #Überprüfung auf Existenz der Parameter,-ne 2 nicht gleich 2 dann
    then
    echo "Beim aufruf müssen zwei Parameter mitgegeben werden"   #kommt diese Meldung

     else
    echo " Parameter 1: $1 Parameter 2: $2 " #sonst werden die Werte der Parameter ausgegeben
fi
          if [ ! `echo $1 | grep -v "[^0-9]"` ]
             then
            echo "Es waren keine Zahlen"
            exit

                    elif [ ! `echo $2 | grep -v "[^0-9]"` ]
                    then
                    echo "Es waren keine Zahlen"
                    exit


		    fi

                          if [ $1 -gt 99 ]   #falls $1 >99
                          then
                         echo "zu groß"   #zu groß( aufgabenstellung sagt, sollen von 1-99 sein      #$1=y $2=x
                         echo "es dürfen nur zahlen von 1-99 eingegeben werden" #meldung
			  exit
			
                                  elif [ $2 -gt 99 ]   #falls $2 >99
                                 then
                                 echo "zu groß"   #Meldung
                                 echo "es dürfen nur zahlen von 1-99 eingegeben werden" #zu groß
				  exit
  
fi
                  
		  

 if [ $x -gt $y ]
     then
     echo " $x ist groesser als $y" #Meldung wird ausgegeben
     exit #Beenden des Programms

 
fi

      while [ $y -gt $x ] #solange Parameter1<Parameter2
   do
    
    for ((i=0; i<3; i++))

    do
    y=$[$y-1]
    echo -n  "  $y  " 
    echo -n  " + "
    
    
   
 
        #ausgabe wert

     
done
echo
done
 
A

Anonymous

Gast
intergo schrieb:
Nun möchte ich aber die Ausgabe der Zahlen formatieren, d.h. ich möchte die Ausgabe so gestalten , dass ich pro zeile 3 Zahlen habe immer.
....
Ich bin halt am grübeln wie ich so etwas schreibe.
Dann führe mal folgendes Script aus und versuche herauszufinden was da gemacht wird. In der Mathematik heißt die Funktion die hier verwendet wird "modulo" , und bezeichnet den Rest einer Division von Ganzzahlen.
Code:
typeset -i COUNT=0
for i in $(seq 1 59)
do
     echo -en "$i \t\t"
     COUNT=$COUNT+1
     REST=$((COUNT % 3))
     if [ $REST -eq 0 ]
          then
          echo
     fi
done
echo
robi
 
Oder vielleicht so?
Code:
#!/bin/bash

from=30
to=2

x=0
for (( i=$from; i>=$to; i-- ))
do
    if test "$(echo $x % 3 | bc)" -eq 0
    then
        if test $x -ne 0
        then
            echo -e "$a"
        fi
        a="$i"
    else
        a="$a\t\t$i"
    fi
    let "x+=1"
done
echo -e "$a"
;)

Irgendwie schreib' ich immer so. Manche finden das etwas holprig, aber ich finde, so kann man's wenigstens ganz gut verstehen ...
 
danke, ich hab wohl den etwas längeren weg genommen.
Ihr helft mir recht viel, danke an euch, durch euch lerne ich dazu
 
Oben