Gedankensplitter der Script Programmierung


Es gibt verschiedene Shell, die 3 klassischen Korn-Shell, Bourne-Shell, C-Shell
bourne again shell = bash = Kommandointerpreter mit Programmiersprache unter GNU/Linux Standard-Shell
Shell= Benutzerschnittstelle zwischen Betriebssystem und Benutzer wie command.com unter DOS
Shell interpretiert Stapel-Dateien, Batch-Dateien, Shell-Skripte, Shell-Prozeduren, Textdateien

bash Hilfe

man bash
/usr/doc/bash
info -f /usr/info/bash
info -f /usr/info/bash.info

Version anzeigen

echo $BASH_VERSION
2.05b.0(9)-release
oder set | less
bash --help

Anzeige der laufenden Shell

echo $0
= /usr/bin/BASH

Tastenkürzel

Alt +D = Wort löschen
STRG+L = Bildschirm löschen
STRG+K = Bis zum Ende der Zeile löschen
Config in .inputrc

Shell im laufenden Betrieb jederzeit wechseln mit (wenn installiert):
bash oder sh in die Bash-Shell
ksh oder pdksh in die Korn-Shell
ash für BSD-Systeme
csh oder tcsh in die C-Shell
zsh in die Z-Shell

Mit exit zurück zur letzten aktiven Shell.

Shell dauerhaft ändern:
chsh (change shell) mach Änderung in /etc/passwd

Shell sind in
/bin
z.b. /bin/csh für C-Shell
Liste in /etc/shells

Alias Abkürzung bekommt den Vorrang vor gleichen Kommandos
// setze h für das wechsel in das Homeverzeichnis
alias h='cd ~'
// aufruf dann
h
// Tip
allias more=less

//Löschen mit
unalias
oder bis zum beenden der Shell, dauerhaft Speichern in .profile


// zeigt den Path an
echo $PATH
// Path voreinstellungen ändern in
/etc/profile
// durchsucht alle Standartverzeichnisse für Programme
whereis name
// durchsucht Pfad
which

Umleitung
// Schreibe das dir in die Datei
ls -la > inhalt.txt
// mit Fehlermeldungen
ls -la BackSpace: string(0x7f)\n\
	Delete: string(0x04)\n\
	Home: string(0x01)\n\
	End: string(0x05)


//less  Zeigt Dateien Seitenweise an, vor und zurück mit /suche und h hilfe
man less
less datei.txt
// alle gefundenen etc werden markiert
less -p 'etc'
// keine Umlaute in less dann in /etc/profile
# less setup
export LESSCHARSET=latin1
export LESS=-MM

// Eigenes Verz. für Scripte
mkdir ~/bin
// in ~/.profile
PATH=$PATH':~/bin'


// Schnelle suche nach Dateien
// DB inizialisieren die in /var/lib gespeichert wird mit

updatedb

// dann Dateien suchen mit

locate Dateiname
locate '*dvips'
locate datei.txt

// Loginname ausgeben mit

logname

// Symbolischen Link anlegen
// Z.B. erzeugt zeigt dann auf /dir/oder

ln -s /dir/oder erzeugt

// Liste Dateien ausführlich, reverse, sortiert nach time neueste zuletzt
ls -lrt
// Liste Dateien ausführlich sortiert nach time neueste zuerst
ls -lt
ls -lt /root

// oder Liste aller Verzeichnisse
ls -ld */.
// oder Liste aller Verzeichnisse ausführlich reverse sortiert nach time neueste zuletzt
 ls -ltrd */.

// Suchen in Dateien mit grep optionen suchmuster datei
// z.B. Suche das den Begriff suchmuster in allen Dateien
grep suchmuster *

// oder suche nur in den *.txt Dateien
grep suchmuster *.txt


// Dateien vergleichen mit diff
diff erstedatei zweitedatei

// ignoriere leerzeichen und leerzeilen ganz
diff -w erstedatei zweitedatei

// Speicherbedarf anzeigen in Killobyt
du
// in bytes
du -b

// Suche nach Dateien autom. in allen Unterverzeichnissen
// z.B. suche alle Dateien die mit 1 anfangen
find -name '1*'

// finde alle Dateien die zur gruppe all gehören und im Verz. test liegen
find ./test/ -group all
// oder die dem user www gehören
find ./test/ -urser www
// oder die älter als 2 Tage sind
find ./test/ -user www -ctime +2



// extrahieren von Spalten
// liefert alle Zeichen ab der 6.Position
cut -b 6- text-datenbank.txt > ergebnis.txt
// oder nur die ersten 3 Zeichen und vom 10. an weiter
cut -b 1-3,10- text-datenbank.txt  > ergebnis.txt

// extrahiert Zeilen trennt an der 2.Zeile in zwei Dateien xx00 und xx01
csplit text-datenbank.txt 2
// trennt jede Zeile in eine Datei mit namen zeile.00 ... -k behält Dateien auch bei Fehler
// -z verhindert leere Dateien
csplit -k -z -f zeile. text-datenbank.txt 1 {*}
// oder trennt immer wenn wenzlaff gefunden wird
csplit -k -z -f down-zeile. down.html '/wenzlaff/' {*}

// ersetzte alle Zeichen ; durch # in db.txt und schreibe ergebnis nach neue-db-#.txt
tr ';' '#' < db.txt > neue-db-#.txt
// alle aus down.txt buchstaben in GROSSBUCHSTABEN ergebnis in down-gross.txt
tr a-zäöü A-ZÄÖÜ < down.txt > down-gross.txt

// Datei Zeitpunkt ändern
// alle Dateien bekommen den aktuellen Zeitstempel
touch *

// Durchsucht alle im Path stehende Komandos
// und liefert den path des Programmes das ausgeführt würde
which ls

// sortiert nach der 6. Spalte
ls -la | sort +6

// Teile eine Datei zeilenweise auf geht auch byte und zeilengrenzen
// werden dann zerlegt in z-teilaa z-teilab ...
// z.b. teile in 1kb grosse dateien
split -1 db.txt z-teil.
// teile in je 100 zeilen line
split -l 100 down.txt down-z.

// wieder zusammenführen mit
cat z-teil.* > db-kopie.txt

// Achtung! Ersetzt dateien:
// konvertierung nur Zeilenende
fromdos datei
todos datei
// mit sonderzeichen
recode ibmpc:latin1 datei
recode latin1:ibmpc datei

// eleminiert doppelte zeilen die aufeinander folgen,
uniq db.txt > doppelte.txt
// mit sort werden alle doppelten gefiltert
sort db.txt | uniq  > doppelte.txt

// Dateien umgekehrt anzeigen, letzte Zeile zuerst
tac dateiname.txt

// Suchen
// sucht alle tag ignoriert gross und kleinschreibung in suche.txt
grep -i '[0-9]*' suche.txt


// Umbennenen von allen *.txt Dateien nach .txt.bak im Verzeichnis
for i in *.txt; do mv $i ${i%.*}.txt.bak; done

// Kopieren von allen *.txt nach .txt.bak
for i in *.txt; do cp $i ${i%.*}.bak; done

// Anzeigen nur der ersten 3 Zeilen der Datei
head -3 neue.txt
// Aus allen *.txt Dateine nur die ersten 2 Zeilen anzeigen
head -2 *.txt
// Oder die jeweils letzten 2 Zeilen
tail -2 *.txt

// Nehme alle *.bak Dateien und suche in jeder nach  ignoriere dabei die gross und
// kleinschreibung und zeige die gefundenen Zeilen an,
// gebe auch jeden untersuchten Dateiname aus
for i in *.bak; do grep -i '' $i ; echo $i;  done

// Sed liesst aus stdin und gibt auf stdout aus
// In suche.txt wird der  durch ------- ersetzt nur das erste vorkommen in der Zeile
// und auf stdout angezeigt
// suche.txt wird nicht verändert
sed s/''/'-------'/ < suche.txt
// suche.txt.del wird eingelesen und jeder  wird durch ------ ersetzt und dann
// nach suche.txt geschrieben
cat < suche.txt.del | sed s/''/'-------'/ > suche.txt

// Suche Ziffern oder keine egal ob gross oder Kleingeschrieben
// ersetzte durch  aus suche.txt
// das g am ende für alle Vorkommen global
sed s/'<[Tt][Aa][Gg]>[0-9]*<\/[Tt][Aa][Gg]>'/'<\/XXX>'/g < suche.txt

// Ersetze in alle *.txt Dateien den Zahl unabhängig von der Schreibweise
// und ersetze durch  jedes vorkommen (g) und schreibe die neue Datei
// nach alterDateiname.txt.ersetzt lasse die alten bestehen
for i in *.txt; do cat < $i | sed s/'<[Tt][Aa][Gg]>[0-9]*<\/[Tt][Aa][Gg]>'/'<\/XXX>'/g  > $i.ersetzt; done


// Nehme alle *.txt suche darin den  und ersetze in der Zeile nur einmal und
// schreibe eine kopie nach Dateiname.HHH
for i in *.txt; do cat < $i | sed s/''/''/ > $i.HHH; done

// Zeige differenzen an
diff datei.txt datei.txt.HHH

// Default Werte
// Wenn zahl leer ist wird 55 als default verwendet und in die Variable
${zahl:=55}

// oder mit Text mit veränderung von zahl
${zahl:="Default Text"}
// und die länge des Textes, ohne veränderung von zahl
${zahl:#}

// Wenn zahl leer dann Fehlermeldung und Shell-Programm beenden sonst die zahl
${zahl:?"Variabel zahl ist leer und exit"}

// entfernt Zeilenumbrüche
tr -d \\012 < beispieldatei.txt

// Zeige nur die ersten 10 Zeilen an
cat < 3-Log-Saetze.txt | sed '10 q'

// Ersetzen und anzeigen in less
sed 's/end of block/------/' 3-Log-Saetze.txt  | less

// gebe von einen Pfad nur den Dateiname zurück
pfad=`pwd`
pfad=${pfad}/dateiname.txt
echo ${pfad##*/}
// Pfad und Datei ohne Extension
echo ${pfad%%.*}

// Zeige alle Prozesse
ps

// Kommando Zeilen Editor einstellen
set -o vi

// oder
set -o emacs

// ESC=  listet alle möglichen Expandierungen

// Wichtige EMACS Kommandos
STRG-f // (forward) ein Zeichen nach rechts
STRG-b // (backward) ein Zeichen nach links
STRG-a // (anfang) zum Anfang der Zeile
STRG-e // (ende) zum Ende der Zeile

STRG-d // (delete) löschen Zeichen an Cursorposition
STRG-h // (delete nach links)
STRG-k // (delete) ab position bis zum Ende er Zeile

STRG-p // History prev. zurück
STRG-n // History next vor

// Kommando im VI Modus
set -o -vi

// dann Vervollständigung des Pfadnamens
ESC\
// Pfadnamen-Expandierung mit
ESC*

// mit ESC in den Kommandomodus von VI dann
w // ein wort weiter
b // back ein wort
h // Zeichen nach links
l // Zeichen nach rechts
0 // Erstes Zeichen der Zeile oder auch
| // Erstes Zeichen der Zeile
$ // Letztes Zeichen der Zeile
fc // Findet das erste Zeichen c von links

// im Kommandomodus mit ESC gehen und dann
a // (append) rechts von Cursor Text einfügen

k // holt mit jeden druck, den vorherigen History Eintrag
j // holt mit jeden druck, den nächsten History Eintrag
/string // suche string in History oder
/ // dann ist string der aus dem letzten suchkommando

// KSH
cd  // nach Home
cd alt neu // ersetzt alt String durch neu String und wechselt in das Verzeichnis
cd - // gehe zum vorherigen Arbeitsverzeichnis



// tar Archiv auf UNIX evl. ohne Optionsstriche z.b.
// tar cvf archiv.tar pfad
// Immer nur eine Aktion und dann Optionen
// Aktion:
//			 -c			// erzeugt ein neues Archiv
//			_-r			// erweitert das Archiv um zusätzliche Dateien
//			 -t 		// zeigt Inhalt an
//			 -d			// löscht Datei aus archiv
//			 -x			// Extrahiert Dateien, sie verbleiben aber im Archiv
// Optionen: -C    		// extrahiert in das Verzeichnis
//			 -f datei 	// verwendet Datei als Archiv
//			 -z			// komprimiert bzw. dekomprimiert mit gzip das Archiv ist
//						// dann *.tgz; *.tpz oder.tar.gz.
//						// -z ist aber inkompatibel zu den tar Versionen auf vielen UNIX
// Ansehen des Inhaltes eines tar Files
tar -tzf archiv.tar
// Speichert alle Dateien im . Verzeichnis in das archiv.tar
tar -czf archiv.tar .
// Speichert alle Dateien aus dem test Verzeichnis, das test wird dann auch wieder angelegt
tar -czf archiv.tar test
// Extrahiert das archiv.tar wie Verzeichnisstrucktur
tar -xzf archiv.tar
// Extrahiert das archiv.tar in das verz Verzeichnis
tar -xzf archiv.tar -C /verz
// oder alternative
tar -xzf archiv.tar /verz
// oder nur dir *.ksh Scripte extrahieren
tar xzf archiv.tar '*.ksh'


// Soft Link anlegen von test Verzeichnis auf Name nur_ein_link
ln -s ./test/ nur_ein_link

// Kopieren ganzer Verzeichnisse mit symbolische Links gut für copy Dateibaum von eine Partition auf andere
// Kopier ./archiv nach ./archiv-kopie
(cd ./archiv ; tar cf - .) | (cd ./archiv-kopie ; tar xvf -)









[Spende] - [Top] - [Home] - [Tools] - [Text] - [Suche] - [Kontakt]  RSS XML Valid HTML 4.0!
Copyright ©1998-2010 by Thomas Wenzlaff
Alle Rechte vorbehalten. Disclaimer
http://www.wenzlaff.de vom 03.01.2007