Start Web Helpdesk Projekte WB-einfach WB-Multi

Linux . . . ShellScript  Helpdesk Inhalt-Helpdesk Unten PDF

ShellScript

Inhalt

1.Variablen
1.1letztes (x) Zeichen einer Variablen
1.2Anzahl Zeichen in var
2.sed
2.1Zeile löschen
2.2Text ersetzen
3.Zwischenablage
4.tr
4.1Zeilenumbruch entfernen
4.2groß und kleinschreibung tauschen
5.awk
5.1nur string 2 anzeigen
5.29 Zeichen ab Stelle 291 lesen
5.3nächste zeile in $0 laden
6.tail
6.1letzte Zeile auswählen
7.head
7.1erste n zeilen lesen
8.sort
9.read
9.1Zeilenweise lesen
10.case
11.enscript
11.1Ascii in ps und pdf
12.cut
13.Array
14.Malen im script
15.Echo
15.1ohne Zeilenumbruch am ende
15.2Buntes Echo
16.Dateien in Ordner verarbeiten
17.Einzeiler
18.grep


Variablen

intern

echo Uebergabeparameter: $*
echo user ist: $USER
echo shell ist: $SHELL
echo Parameter 1 ist: $1
echo Prozedurname ist: $0
echo Prozessnummer ist: $$
echo Anzahl der Parameter ist: $#
a=17.89        # ohne Luecken am = Zeichen

system

echo $PPID >/daten/public/drucker.txt
echo $UID  >>/daten/public/drucker.txt
echo $HOME >>/daten/public/drucker.txt
echo $HOSTNAME >>/daten/public/drucker.txt
echo $HOSTTYPE >>/daten/public/drucker.txt
echo $MACHTYPE >>/daten/public/drucker.txt
echo $OSTYPE >>/daten/public/drucker.txt
echo $$ >>/daten/public/drucker.txt
echo $SECONDS >>/daten/public/drucker.txt

http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/internalvariables.html

http://de.selfhtml.org/servercgi/cgi/umgebungsvariablen.htm

letztes (x) Zeichen einer Variablen

 echo ${vartest: -1}

Anzahl Zeichen in var

hier in einem Array Pos 2

 echo ${#array[2]}

sed

Zeile löschen

Alle Zeilen mit hallo löschen

 sed '/hallo/ d '

Text ersetzen

In allen Zeilen Hallo mit Hellau ersetzen.

 sed "s/Hallo/Hellau/g"

Punkt ist schwerer..

 s/\./ /g

Nur zeilen mit ich ändern

 sed -e '/ich/s/$1500/$3000/g'

wenn auch / weg müssen geht auch

  sed "s.Hallo.Hellau."

sed kann auch mehreres auf einmal wenns mit semikolon getrennt ist:

 sed "s/ersteswird/das/;s/andere/jenes/g"

Wems aufgefallen ist, beim ersten ist es ohne g , das steht für ALLE


Zwischenablage

 echo hier irgend was|xclip -selection clipboard

tr

Zeilenumbruch entfernen

#zeilenumbruch tr -d '\r' oder tr -d '\n'

 tr -d '\r' 
 tr -d '\n'

groß und kleinschreibung tauschen

 tr A-Z a-z
 tr a-z A-Z
 tr "[:upper:]" "[:lower:]"
 tr "[A-Z]" "[a-z]"

awk

nur string 2 anzeigen

 awk '{print $2}'

9 Zeichen ab Stelle 291 lesen

 BaCo=`echo "$line" | awk '{print substr($0, 291, 9)}'` # "" wegen leerzeichen

nächste zeile in $0 laden

 awk '/eth0/{getline; print $0}'

Berechnung anhand der Länge einer Variablen

 let lange=`echo $Nummer | awk '{print length($Nummer)}'`*10+100

tail

letzte Zeile auswählen

 wer=`tail -n 1 $PC`

head

erste n zeilen lesen

 head -n 8 /daten/www/htdocs/wetter.htm

sort

Datei sortieren, Spalte 1 nehmen und doppelte entfernen

 sort -f $tmp | awk '{print $1}'| uniq   >$testsoft 

read

Zeilenweise lesen

 cat $dadei |while read line
	do
		irgendwas
	done

case

 case $Stax in
	11) Stay="OK"
	;;
	69) Stay="ZUG"
	;;
	*) Stay="NIX" # alles andere
 esac

kann auch einen Substring finden:

            case "$Dateiname" in
                *"€"*) DatName=`echo $Datei | cut -d '€' -f 2 `  ;;  # trennt anhand vom € und nimmt den 2ten Teil
                *)     DatName=`echo $Datei | cut -d '_' -f 2 `      # sonst trennen wir mut dem _
            esac

enscript

Ascii in ps und pdf

 enscript -B testfile.txt -p- | ps2pdf - testfile.pdf
 cal 2013 | enscript | lpr -p lp98

cut

 bor=`echo $line | cut -d '|' -f 3 `
 id="$( cut -d '|' -f 2 <<< "$line" )"
 echo dingensens|cut -c 1-5
 cut -c 1 <<< "$test"     #erstes Zeichen
 cut -c 1-6 <<< "$test"    # erste 6

Array

 $ set -A array "one two three four"
 $ echo ${array[0]}
 one two three four

so the command given in the OP results in an array with a single element. To replicate that behavior: Code:

 $ string="one two three four"
 $ set -A array "$string"
 $ echo ${array[0]}
 one two three four

but if you want to split it into separate array elements do: Code:

 $ string="one two three four"
 $ set -A array $string
 $ echo ${array[0]}
 one

if this is not working for you, you probably have IFS set wrong: Code:

 $ IFS=""
 $ string="one two three four"
 $ set -A array $string
 $ echo ${array[0]}
 one two three four

Malen im script

 convert -size "1000x1000" xc:white  \
  -fill black -draw "line 50,90 200,600"  \
  -fill grey -draw "line 200,600 600,300"  \
  test.png

oder transparent:

 convert -size "1000x1000" xc:none  \
  -fill black -draw "line 50,90 200,600"  \
  -fill grey -draw "line 200,600 600,300"  \
  test.png

Echo

ohne Zeilenumbruch am ende

 echo -n Hallo

Buntes Echo

Format

Einstellig ist die Schriftform:


  echo -e "\e[0m" #Normal
  echo -e "\e[1m" #Bold
  echo -e "\e[4m" #Underline
  echo -e "\e[7m" #Invert
  echo -e "\e[8m" #Hidden
  echo -e "\e[0m" #Normal

Schriftfarbe

Erste stelle 3 oder 9 ist die Schriftfarbe wobei x9 jeweils default ist.


  echo -e "\e[30m" #Black
  echo -e "\e[31m" #Red
  echo -e "\e[32m" #Green
  echo -e "\e[33m" #Yellow
  echo -e "\e[34m" #Blue
  echo -e "\e[35m" #Magenta
  echo -e "\e[36m" #Cyan
  echo -e "\e[37m" #Light Gray
  echo -e "\e[39m" #Normal
  echo -e "\e[90m" #Dark Gray
  echo -e "\e[91m" #Light Red
  echo -e "\e[92m" #Light Green
  echo -e "\e[93m" #Light Yellow
  echo -e "\e[94m" #Light Blue
  echo -e "\e[95m" #Light Magenta
  echo -e "\e[96m" #Light Cyan
  echo -e "\e[97m" #White

Hintergrundfarbe

Erste Stelle eine 4 oder 10 ist die Hintergrundfarbe und die 9 hinetn wieder default.


  echo -e "\e[40m" #Black
  echo -e "\e[41m" #Red
  echo -e "\e[42m" #Green
  echo -e "\e[43m" #Yellow
  echo -e "\e[44m" #Blue
  echo -e "\e[45m" #Magenta
  echo -e "\e[46m" #Cyan
  echo -e "\e[47m" #Light Gray
  echo -e "\e[49m" #Normal
  echo -e "\e[100m" #Dark Gray
  echo -e "\e[101m" #Light Red
  echo -e "\e[102m" #Light Green
  echo -e "\e[103m" #Light Yellow
  echo -e "\e[104m" #Light Blue
  echo -e "\e[105m" #Light Magenta
  echo -e "\e[106m" #Light Cyan
  echo -e "\e[107m" #White

Dateien in Ordner verarbeiten

 for i in ordner/*.txt ; do cat "$i"| tr -d '\r' >"neu_$i" ; done

der Ordner die dateien landen dann im Ordner neu_ordner wenn ihn vorher jemand angelegt hat

Einzeiler

Alle .txt im Verzeichnis 2017 lesen Zeilenumbruch entfernen und nach neu_2017 schreiben

for i in 2017/*.txt ; do cat "$i"| tr -d '\r' >"neu_$i" ; done

grep

 grep dings
sucht die Zeilen wo "dings" steht
 -A 1 #und die nächste
 -B 1 #und die Bevor
 -C 1 #und eine Bevor UND eine Apend


www.bittnermichael.de
Datenschutz Impressum