Lösungen
für Hinweise auf Fehler stets dankbar und offen ?
Übung 02
1) a)
mkdir Subdir subdir
b)
cat > da ..... ..... # Strg+c
c)
# -----
d)
mv subdir/da subdir/Da
e)
# -----
f)
rm subdir/Da rmdir subdir
g)
# für das aktuelle Verzeichnis
2) a)
# erster erstellt im ~ eine leere Datei mit den Namen experiment, zweiter gibt eine Fehlermeldung aus, da die Datei da in Subdir schon vorhanden ist
b)
# eine Ausgabe
c)
# eine Fehlermeldung?
d)
# date => gibt das aktuelle Datum aus # who => zeigt an wer eingeloggt ist # who -H => -""- mit Kopfzeile # who -uH => -""- -""- mit Loggintime # finger => gibt Informationen über den Benutzer aus # uname => gibt das BS aus # -a steht bei den meisten Programmen für all
e)
# file gibt Auskunft über die Datei, das bedeutet aber nicht unbedingt das man direkt erfährt zu welchen Progamm die Datei gehört. Des weiteren kann man mit file dateien manipulieren.
f)
# -k => Sucht im Namen und in den Kurzbescheibungen # -l => verwendet nur lokale man # -a => alle gefunden man werden nacheinander angezeigt
3)
# es gibt mehrere Möglichkeiten, aber in diesem Fall wird nach id gesucht.
Übung 03
1-3)
# ---
4)
# 022 -> 755
5)
# chmod u=rx,g=rx,o=x f chmod 551 D # chmod u=r,g=r,o=- f chmod 440 D # chmod u=rw,g=r,o=- f chmod 640 D # chmod u=rwx,g=-,o=- f chmod 700 D # chmod u=wx,g=r,o=- f chmod 340 D
6)
# umask 27
7)
# in der Bourne geht es so % export PATH=.:$PATH # wie es in der tcsh ist muss ich noch einmal nachschauen.
8)
# den pfad findet man mit which uname # der zweite Schritte würde auf meinen System so aussehen cp /bin/uname ~/ls # Es wird uname ausgeführt, da uname nun in meinen ~ auf ls hört und mein ~ zuerst aufgerufen wird.
9)
# pfad wo liegt
10)
set myvar = 2008 # In der ersten. # In allen # Nein da die conf nicht neu eingelesen wurde.
Übung 04
1)
ls -l > manpages.info cat manpages.info more -"- less -"-
2)
# less is more # man less ?
3)
# /dev/.... # Ich bin der Eigentümer # Es geht nicht weil Gerätedateien schreibgeschützt sind und weil sie gerade in verwendung ist
4)
echo $#path
Übung 05
1)
cd /usr/bin
a)
echo ??
b)
echo [aeiou]*d
c)
echo *\?*
2) a)
ls- l | grep '^..$'
b)
ls- l | grep '^[aeiou]*d$*'
c)
ls- l | grep '*?*'
3)
set zlist `date` set zlist [1]=heute
4)
set pco `ps -e | wc -l`
Übung 06
Aufgabe 1
ls -l |grep '[May]a[iy]'
Aufgabe 2
set substitutionfolge `~/.*`
Aufgabe 3
# ls ausgabe gefilter auf dot-files
Aufgabe 4
(find /usr -name '00*' >jarout) > & /dev/null
Aufgabe 5
# nein dieses ist in der tcsh nur indirekt möglich
Aufgabe 6
ls -l /usr | grep d...r.xr.x
Übung 07
Aufgabe 1
chmod 755 ~
Aufgabe 2
#! bin/tcsh -f set zz = gesetzt echo $zz
Übung 08
Aufgabe 2
#! bin/tcsh ps -f | sed 1,1d
Aufgabe 3
#!/bin/tcsh echo "Any Key-Taste drücken" read AnyKey echo "Mahlzeit du Lusche, wie ist dein Vorname?" set PRENAME=$< echo "Ich will jetzt deinen Nachnamen hören, du Drecksack!" set NAME=$< echo "Ah die Dame heisst $PRENAME $NAME" echo "Ah die Dame heisst $NAME , $PRENAME" echo "Wie ist deine Matrikelnummer?" set MATRNR=$< if ( $MATRNR % 2 == 0 ) then echo "$MATRNR ist gerade" else echo "$MATRNR ist ungerade" endif echo "ENDE"
Aufgabe 4
#! bin/tcsh set anz=$#argv while ( $anz != 0 ) if (-d $argv[$anz] ) then rm -r $argv[$anz] echo " argument" $anz " ist ein verzeichnis und wurde gelöscht" else echo " argument " $anz "ist kein verzeichnis" endif @ anz -- end
Aufgabe 5
#! /bin/sh for verz in $* do # $verz da?? if [ -d $verz ] then # ja also dann löschen rmdir $verz else # NEIN? echo he, du Sack $verz ist nicht da. fi done
Aufgabe 6
#!/bin/tcsh if ( $argv != 2 ) then #exit else if (! ((-f $1 && -f $2) || (-d $1 && -d $2)) then #exit else if ({ (diff $1 $2 > /dev/null) }) then #exit else echo "Sind gleich" endif endif endif echo "ENDE"
Aufgabe 8
set a=wirklich set b=$a echo $b ---> wirklich Bei eval vor einer Kommandozeile, werden in einem ersten Durchlauf alle Variablen durch ihre Inhalte ersetzt, die geänderte Zeile wird dann abgearbeitet.
Aufgabe 9
#! bin/tcsh set anz=$#argv while ( $anz != 0 ) if (-f $argv[$anz] ) then echo $anz -tes Argument: `cat $argv[$anz]` else echo $anz -tes Argument: ungültig endif @ anz -- end
Übung 11
Aufgabe 1 ganz einfaches Bsp. frei in einer Minute zusammen gehakt.
<html> <head> <titel>Homepage von Karl Arsch</title> <style type="text/css"> <!-- body { background:#000; } h1,h2,h3,h4 { background-color:#fff } #head h1 {} #content h1 {} #content p.absatz {} --> </style> </head> <body> <div id="head"> <h1>simple Site</h1> </div> <div id="content"> <h2>zweiter Titel</h2> <p class="absatz"> erster Absatz </p> <p class="absatz"> zweiter Absatz </p> </div> </body> </html>
Aufgabe 2 a)
// es gibt nichts zu beobachten bei gcc fout.c -o fout
b)
7 16.5 Es wurden 7 Zeichen ausgegeben. 1076920320 0.0 Es wurden 15 Zeichen ausgegeben.
c)
// ist eine printf drin, d.h. Ausgabe
d)
// meldet ein paar Fehler fout.c: In function `main': fout.c:22: warning: int format, double arg (arg 2) fout.c:22: warning: double format, different type arg (arg 3)
Aufgabe 3
/* * hier ohne Fehler */ #include<stdio.h> int main() { int i = 63; double x = .000007; double y = 123.45; printf("\ni:\n%d \n%o \n%x \n%X", i, i, i, i); printf("\nx:\n%f \n%e \n%E \n%g \n%G", x, x, x, x, x); printf("\ny:\n%g \n%G \n", y, y); return 0; } /* * zum vgl der code mit Fehler */ int main() { int i = 63; double x = .000007; double y = 123.45; printf("\ni:\n%d \n%o \n%x \n%X", i, i, k, i); printf("\nx:\n%f \n%e \n%E \n%g \n%G", x, i, x, x); printf("\ny:\n%g \n%G", i); }
Aufgabe 4
// // es soll der text "Ich kenne die Formatelemente zu 100%." Ausgegeben werden // //base header #include<stdio.h> //start main -> void = keine parameter int main(void) { //Ausgabe, man achte auf %% printf("Ich kenne die Formatelemente zu 100%%.\"); return 0; }
Übung 12
Aufgabe 1
/* fehler.c * * Ein Programm, dass Compilerfehler, * Laufzeitfehler und logische Fehler demonstriert. * */ #include <stdio.h> int main() { int num1, num2, x,y; num1 = 0; num2 = 1; printf("Der Quotient der Variablen ist: "); printf("%d\n", num1/num2); printf("\n"); // Leerzeile printf("Jetzt werden die Variablenwerte vertauscht.\n"); x=num1; y=num2; num1=y; num2=x; printf("Der Quotient der Variablen ist nun: "); printf("%d\n", num1/num2); return 0; }
c)
/* * Fehlermeldung: Fließkommafehler (core dumped) * Grund: Division durch 0 ist nicht möglich. */
Aufgabe 2
/* Programm, dass zuerst die geraden Zahlen von 12 bis 0, dann * die ungeraden Zahlen von -1 bis -13 und zum Schluss die ersten 10 Quadratzahlen * mit Hilfe einer for-Schleifen ausgibt: * */ #include <stdio.h> int main() { int i; for (i=13;i>-1;i--) { if ( i%2 == 0 ) { printf( "%d,",i) ; } } printf("\n"); for (i=-1;i<=13;i++) { if ( i%2 == 1 ) { printf("-"); printf( "%d,",i) ; } } printf("\n"); for(i=0;i<10;i++) { printf( "%d,",i*i) ; } printf("\n"); return 0; }
Aufgabe 3
/* * Temperatur wird in celsius und fahreheit angegeben in einer * Tabelle */ #include <stdio.h> int main() { int f=0; int c=0; printf("Fahrenheit Celsius \n"); while (f <=300 ) { c=f-32; c=c*5; c=c/9; printf("%d\t\t%d\n",f,c); f=f+20; } return 0; }
Aufgabe 4
/* * quadrat einer eingabe mal 3 */ #include <stdio.h> int quadratdrei (int n) { n=n*n; return n*3 ; } int c; int qud; int main() { scanf("%d",&c); qud=quadratdrei(c); printf("%d\n",qud); return 0; }
Aufgabe 5
/* * Das Script erwartet eine Eingabe und es nimmt solange die Eingabe * entgegen bis ein newline kommt. Die Eingabe wird dann in ASCII-Werte * "übersetzt". In der folgenden Ausgabe werden die ermittelten Werte * auf der Ausgabeeinheit ausgegeben. Jeder Wert in einer newline. */ /* * Zeichen zählen * File count.c */ #include <stdio.h> #include <stdlib.h> int main (void) { int c,count=0; printf("Schreib und das ist ein Befehl: \t"); while((c=getchar()) != '\n') { count++; } printf("Anzahl der Zeichen beträgt %d Zeichen\n", count); return EXIT_SUCCESS; }
Übung 13
Aufgabe 1
/*Ein Programm zu berechnen des Zinses mit Zinsanlage */ #include <stdio.h> #define Jahre 10 /*Laufzeit*/ #define gka 1000 /*kapital*/ #define z 5 //Zinsen int main(){ int i; float gk, zins ; gk=gka; printf("Jahr \t Geld \n"); for (i=0; i<=Jahre ; i++ ){ printf("%d \t %.2f \n ", i , gk ); zins=((z*gk)/100); gk= gk+zins ; } return 0; }
Aufgabe 2
/* * Ein Programm zum Zeiger ausprobieren */ #include <stdio.h> int main () { int i, * pointeri; pointeri=&i; i=1; printf("%p \n", pointeri); printf("%d \n", *pointeri); printf("%d \n", i); *pointeri=2; printf("%d \n", i); return 0; }
Aufgabe 3
/*Ein Programm zum Zeiger ausprobieren */ #include <stdio.h> void swap (int *pointa,int *pointb){ int z; z=*pointa; *pointa=*pointb; *pointb=z; } int main() { int a=2; int b=4; printf("%d %d \n ", a , b); swap(&a,&b); printf("%d %d \n ", a , b ); return 0; }
Aufgabe 4
/* mithilfe von zeigern zerteilte ausgabe einer hexazahl */ #include <stdio.h> int main() { long long S, *ptr; S =0x1a1b2a2b3a3b4a4bULL; ptr=&S; unsigned short *a, *aa, *aaa,*aaaa; void *whole ; whole = ptr ; a=whole; aa=a+1; aaa=a+2; aaaa=a+3; printf("wert der long long S: %llx \n ", S); printf("Wert des 4 doppelbyte %x\n ", *a); printf("Wert des 3 doppelbyte %x\n ", *aa); printf("Wert des 2 doppelbyte %x\n ", *aaa); printf("Wert des 1 doppelbyte %x\n ", *aaaa); return 0; }
Übung 14
Aufgabe 1
#include<stdio.h> #define arrayg 10 int main() { int i; int ar [arrayg]; for (i=0; i<arrayg ;i++){ ar [i]= (i+1)*(i+1); printf("%d ", ar[i]); } printf("\n"); return 0; }
Aufgabe 2
#include<stdio.h> #define arrayg 10 void rev_print(int* arp) { int i; for (i=arrayg-1; i>=0 ;i--){ printf("%d ",(*arp+i)*(*arp+i)); } printf("\n"); } int main() { int i; int ar [arrayg]; for (i=0; i<arrayg ;i++){ ar [i]= (i+1)*(i+1); printf("%d ", ar[i]); } printf("\n"); rev_print(ar); return 0; }
Aufgabe 3
#include<stdio.h> #define arrayg 1000 int main() { int i,j; int eingabe=0; int ar [arrayg]; for (j=0;j<arrayg; j++){ ar[j]=(j)*(j); } for (i=0; i<arrayg ;i++){ printf("Bitte geben sie eine Zahl zwischen 1 und %d ein \n ",arrayg); scanf ("%d", &eingabe ); if( eingabe==0){ break; } if (eingabe<1 || eingabe>1000){ printf("ihre Zahl passt nich in den Array"); continue; } else{ printf("Zahl im Array and der stelle %d ,%d \n ", eingabe, ar[eingabe]); } } printf("\n"); return 0; }
Aufgabe 4
/* char_array.c * * Entscheidung, ob eine Zeichenkette ein 'a' enthaelt */ #include <stdio.h> #define MAX 40 int main() { int index; char eingabe [MAX]; printf("Bitte String eingeben (max. %d Zeichen): ", MAX); gets(eingabe); for (index = 0; eingabe[index] != '\0'; index++) if (eingabe[index] == 'a') break; if (eingabe[index] == '\0') printf("\nDer String enthaelt kein 'a'\n"); else printf("\nDas erste 'a' ist an %d. Stelle\n", index + 1); return 0; }
Aufgabe 5
/* zeichenketten.c
*
* Eingabe, Ausgabe und Manipulation von Zeichenketten
*/
#include <stdio.h>
#include <string.h>
int main() {
char s1 [20];
char s2 [20];
char * name;
char * tmp;
printf("Geben Sie Ihren Vornamen ein: ");
scanf("%s", s1);
printf("Geben Sie Ihren Nachnamen ein: ");
scanf("%s", s2);
tmp = s2;
while (*tmp != '\0') {
if (*tmp > 96 && *tmp < 123)
*tmp = *tmp - 32;
tmp++;
}
name = strcat(s1, " ");
name = strcat(name, s2);
printf("%s\n", name);
return 0;
}
Aufgabe 6
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]){
double kubik;
if (argc != 2){
printf("Falsch!\n");
return 0;
}
if (atof(argv[1])!=0 || *argv[1]=='0' ){
kubik=atof(argv[1]);
kubik=kubik*kubik*kubik;
printf("%f \n",kubik);
}
else {
printf("Keine Zahl!\n");
}
return 0;
}
Literatur
- Martin Dietze: Praxiskurs Unix-Shell; O'Reilly Verlag GmbH & Co. KG, 2011
- Helmut Erlenkötter: C: Programmieren von Anfang an; Rowohlt Taschenbuch Verlag, 1999
- Ulla Kirch-Prinz, Peter Prinz: C - kurz & gut; O'Reilly Verlag GmbH & Co. KG, 2002
Weblinks
Sonstiges
Falls ihr die PATH Variable versaut habt
path (/opt/sfw/teTeX/bin/sparc-sun-solaris2.9 /usr/local/qt/bin /usr/local/kde/bin /opt/sfw/bin /usr/sfw/bin /opt/sfw/gcc-3/bin /opt/local/bin /usr/local/bin /usr/dt/bin /usr/openwin/bin /usr/ccs/bin /usr/bin /bin)
PATH /opt/sfw/teTeX/bin/sparc-sun-solaris2.9:/usr/local/qt/bin:/usr/local/kde/bin:/opt/sfw/bin:/usr/sfw/bin:/opt/sfw/gcc-3/bin:/opt/local/bin:/usr/local/bin:/usr/dt/bin:/usr/openwin/bin:/usr/ccs/bin:/usr/bin:/bin: