Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ShellScript soll Datei mit Echo Zeilenweise ausgeben

Empfohlene Antworten

Veröffentlicht

Hi,

bin mir net sicher, ob meine Frage hierher oder zu den Programmieren gehört,

also verschieben falls falsch.

Ich habe in der Datei "logo" folgendes Ascii-Bild:


             ,        ,

            /(        )`

            \ \___   / |

            /- _  `-/  '

           (/\/ \ \   /\

           / /   | `    \

           O O   ) /    |

           `-^--'`<     '

          (_.)  _  )   /

           `.___/`    /

             `-----' /

<----.     __ / __   \

<----|====O)))==) \) /====

<----'    `--' `.__,' \

             |        |

              \       /       /\

         ______( (_  / \______/

       ,'  ,-----'   |

       `--{__________) 

Nun soll jede Zeile eingelesen werden, um dann mit "echo" ausgegeben zu werden. Der Sinn besteht darin, dass ich der Ausgabe eine Farbe zuweisen kann. Sonst wäre das "Problem" mit "cat logo" zu lösen. Hab auch schon nen Code, nur bringt der nicht das gewünschte ergebnis.

for i in `cat /opt/etc/logo`

 do

 echo $i

done

Mir wäre auch geholfen, wenn mir jmd. sagen könnte, wie ich die Standard-Textfarbe der Console (kurzfristig) ändern kann.

(Geht das in der .profile?)

Hoffe das war verständlich :D

Danke im vorraus

KarlBerg


#!/bin/bash


FILE="/out.txt"

SIZE=`cat -n $FILE | tail -1`


n=1

echo -ne "\033[31m"

while [[ $n -le "$SIZE" ]]

do

        head -$n $FILE | tail -1

        n=$(($n+1))

done


echo -e "\033[00m";

Das ganze benötigst Du nur, falls du jede Zeile der Datei in einen anderen Farbe darstellen möchtest. Dazu einfach innerhalb der Schleife die Zeilennummer abfragen und ein entsprechendes "echo" absetzen. Zum Farbwechsel reicht z.B. ein "echo -e "\033[31m]". Das währe Rot... für anderen Farben einfach mal durchtesten oder im Netz suchen :)

Hi,

erstmal danke für die schnelle antwort.

Leider hab ich das Script noch nicht ganz verstanden :(

Ich hab mal Kommentare hinzugefügt, vielleicht kann die jmd. durch die richtigen ersetzen.

Würde dieses Script auch funktionieren, wenn in der Quelldatei Sonderzeichen auftauchen, wie in meinem Bsp., also "\`´/| und so?

Original geschrieben von DanielB



#!/bin/bash


FILE="/out.txt"  #entspricht wohl meiner logo /also der QuellDatei

SIZE=`cat -n $FILE | tail -1` #was macht Tail?


n=1

echo -ne "\033[31m"              #hae?

while [[ $n -le "$SIZE" ]]        #ist size die ZeilenAnzahl?

do

        head -$n $FILE | tail -1   #head /tail?

        n=$(($n+1))                    #hochzaehlen

done


echo -e "\033[00m";      #;? was wird hier ausgegeben? Variable? 

Danke

KarlBerg

Original geschrieben von KarlBerg

Hi,

erstmal danke für die schnelle antwort.

Leider hab ich das Script noch nicht ganz verstanden :(

Ich hab mal Kommentare hinzugefügt, vielleicht kann die jmd. durch die richtigen ersetzen.

Würde dieses Script auch funktionieren, wenn in der Quelldatei Sonderzeichen auftauchen, wie in meinem Bsp., also "\`´/| und so?

Sorry, hatte es etwas eilig :) Ist auch irgendwie nur ne dirty hack, nicht besonders schön. Geht höchstwahrscheinlich auch einfacher :) Ich werds mal kommentieren :


#!/bin/bash


#Deine Logo ASCSII Datei

FILE="/out.txt"


# Das hier macht nichts anderes als die Anzahl der Zeilen

# der Logo Datei ermitteln. Wird später für die Schleife als 

# Steuervariable benutzt. Tail selbst gibt die letzen Zeilen von z.B.

# einer Datei aus. Das -1 bedeutet, das nur die letzte Zeile 

# ausgegeben wird. cat -n gibt Zeilennummern mit aus. Ist hier 

# eigentlich sehr unschön gelöst, falls die Logo Datei als 

# Abschluss keine Leerzeile hat, funktioniert das ganze Script 

# nicht mehr.

SIZE=`cat -n $FILE | tail -1` #was macht Tail?


n=1

# Ist ein Steuercode welcher die Textfarbe der Console auf

# Rot setzt.

echo -ne "\033[31m"              


# Wiederhole solange n$ kleiner $SIZE.

# Dient dazu jede Zeile der Datei auszugeben.

while [[ $n -le "$SIZE" ]]        

do

        # Yep, head | tail 

        # Es wird vom Anfang der Logodatei,

        # bis Zeile $n ausgegeben. Diese Ausgabe wird an

        # tail weitergeleitet, welches wiederum nur die letzte

        # Zeile ausgibt.

        head -$n $FILE | tail -1   


        # Steuervariable für die Schleife inkrementieren

        n=$(($n+1))                    

done


# Wiederum ein Steuercode, welcher die Textfarbe der

# Console wieder auf das Standard weiss/grau setzt.

echo -e "\033[00m";      

[/code]




Hoffe es ist jetzt ein bisschen verständlicher.

Ja, es funktioniert auch mit Sonderzeichen, ich habe das Script schnell gebastelt und auch mit deinem Logo getestet. Wie oben bereits erwähnt, funktioniert es jedoch im Moment nur, solange die Logodatei eine Leerzeile am Ende besitzt.





Wie gesagt, du brauchst das Script nur wenn Du jede Zeile der Logodatei in einer anderen Farbe ausgeben möchtest. Anderenfalls, reicht sowas auch :



[code] #!/bin/bash # FILE="/logo.txt" echo -e "\033[31m" cat $FILE echo -ne "\033[00m"

Hi,

danke für die Antworten...

...läuft gut...

MfG

KarlBerg

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.