einfaches Shellscript

Shellscripte (hier ein Bash-Script) sind einfache Textdateien, welche im Terminal (also z.B. der Bash) ausgeführt werden können. Auf diese Weise können oft gebrauchte Befehle automatisch ausgeführt werden. In diesem Beispiel erstellen wir ein Script, welches Rechenaufgaben stellt. Das Script läuft erst dann weiter, wenn die richtige Eingabe getätigt wurde. Obwohl folgendes Beispiel eher für den absoluten Einsteiger gedacht ist, zeigt es auf einfachste Weise, was Sinn und Gedanke hinter der Shell-Programmierung ist…

Schritt 1
öffne das Terminal und erstelle mit

nano -w rechnen.sh

eine leere Datei. Füge nun folgenden Quellcode ein:

#!/bin/bash
clear
echo "meine erste Frage: Was ergibt 17 + 31"
echo ""
while true
  do
    read -p "Antwort: " answer
    case "$answer" in 48)
         echo das war richtig
          break
          ;;
      *) echo leider falsch... nochmals!
          ;;
    esac
done
echo ""
echo ""
echo "zweite Frage: Was ergibt 71 - 49"
echo ""
while true
  do
    read -p "Antwort: " answer
    case "$answer" in 22)
         echo das war ebenfalls richtig
          break
          ;;
      *) echo leider falsch... nochmals!
          ;;
    esac
done
echo ""
echo ""
echo "letzte Frage: Was ergibt 14 * 4"
echo ""
while true
  do
    read -p "Antwort: " answer
    case "$answer" in 56)
         echo das war richtig. Vielen Dank für die Teilnahme.
          break
          ;;
      *) echo leider falsch... nochmals!
          ;;
    esac
done


Schritt 2
nach dem Abspeichern muss die Datei noch ausführbar gemacht werden. Dazu genügt ein:

# chmod +x rechnen.sh


Schritt 3
mit

./rechnen.sh

kann das Script nun gestartet werden.

meine erste Frage: Was ergibt 17 + 31

Antwort: 48
das war richtig


zweite Frage: Was ergibt 71 - 49

Antwort: 22
das war ebenfalls richtig


letzte Frage: Was ergibt 14 * 4

Antwort: 56
das war richtig. Vielen Dank für die Teilnahme.
yuna@supertux:~$ 

Weitere Informationen findest Du z.B. unter
http://www.linux-services.org/shell/

Bash on Ubuntu on Windows

Windows versteht Linux! Wenn auch nur in sehr beschränkter Art und Weise, ist dieses Features für einen wahren Linuxfan unter Windows 10 beinahe Pflicht. Die Installation ist relativ einfach:

Schritt 1
wähle Start > Einstellungen > Update und Sicherheit > Für Entwickler. Nach diesem Schritt muss ggf. Windows 10 neu gestartet werden.

Schritt 2
Gehe nun auf Systemsteuerung > Programme deinstallieren und ändern > Windows-Features aktivieren oder deaktivieren und aktiviere hier das Kästchen Windows-Subsystem für Linux (Beta)
Danach ein weiteres mal den Rechner neu starten…
windows-bash001Schritt 3
Öffne nun die Eingabeaufforderung mit Administrationsrechte und tippe
bash
ein. Erst jetzt wird die gesamte Umgebung installiert! Verlasse anschliessend die Eingabeaufforderung mit exit.
windows-bash002
Schritt 4
Starte Bash on Ubuntu on Windows via Start und dem entsprechenden Icon.
windows-bash003
Schritt 5
ab jetzt steht Dir eine Bash unter Windows 10 zur Verfügung. Wie du es von Linux gewohnt bist, werden Pakete via

# apt-get install PAKETNAME

installiert.
windows-bash004

php7 auf Debian Jessie

Debain eignet sich hervorragend, um Webseiten lokal zu entwerfen. Dabei spielt die PHP-Version u.a. eine wesentliche Rolle, was Performance und Geschwindigkeit angeht. Normalerweise landet zur Zeit PHP5 auf Jessie. Mit wenig Handgriffen lässt sich dies jedoch ändern!

Vorsicht: tippe diese Befehle nur ein, wenn du weisst was Du tust. Ein Backup der Datenbank ist selbstverständlich Pflicht!

Schritt 1
füge folgende Quellen in /etc/apt/sources.list ein:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Schritt 2
Installiere den GnuPG Key:

wget https://www.dotdeb.org/dotdeb.gpg
# apt-key add dotdeb.gpg

Schritt 3
und aktualisiere die Paktetquellen

# apt-get update

Schritt 4
installiere nun das Metapacket php7.0

# apt-get install php7.0 

Schritt 5
überprüfe nun die installiereten Pakete:

# dpkg -l | grep php
ii  libapache2-mod-php5                   5.6.22+dfsg-0+deb8u1                 amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  libapache2-mod-php7.0                 7.0.7-1~dotdeb+8.1                   amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php-common                            21-1~dotdeb+8.1                      all          Common files for PHP packages
ii  php-gettext                           1.0.11-1                             all          read gettext MO files directly, without requiring anything other than PHP
ii  php-readline                          21-1~dotdeb+8.1                      all          readline module for PHP [default]
ii  php-tcpdf                             6.0.093+dfsg-1                       all          PHP class for generating PDF files on-the-fly
ii  php5-cli                              5.6.22+dfsg-0+deb8u1                 amd64        command-line interpreter for the php5 scripting language
ii  php5-common                           5.6.22+dfsg-0+deb8u1                 amd64        Common files for packages built from the php5 source
ii  php5-gd                               5.6.22+dfsg-0+deb8u1                 amd64        GD module for php5
ii  php5-json                             1.3.6-1                              amd64        JSON module for php5
ii  php5-mcrypt                           5.6.22+dfsg-0+deb8u1                 amd64        MCrypt module for php5
ii  php5-mysql                            5.6.22+dfsg-0+deb8u1                 amd64        MySQL module for php5
ii  php5-readline                         5.6.22+dfsg-0+deb8u1                 amd64        Readline module for php5
ii  php7.0                                7.0.7-4                              all          server-side, HTML-embedded scripting language (metapackage)
ii  php7.0-cli                            7.0.7-1~dotdeb+8.1                   amd64        command-line interpreter for the PHP scripting language
ii  php7.0-common                         7.0.7-1~dotdeb+8.1                   all          Common files for packages built from the PHP source
ii  php7.0-json                           7.0.7-1~dotdeb+8.1                   amd64        JSON module for PHP
ii  php7.0-opcache                        7.0.7-1~dotdeb+8.1                   amd64        Zend OpCache module for PHP
ii  php7.0-readline                       7.0.7-1~dotdeb+8.1                   amd64        readline module for PHP
ii  phpmyadmin                            4:4.2.12-2+deb8u1                    all          MySQL web administration tool

Schritt 6
entferne nun php5:

# apt-get purge php5*

Schritt 7
und installiere phpmyadmin nach:

# apt-get install phpmyadmin

Schritt 8
überprüfe z.B. mit einer Datei info.php unter /var/www/html nun die Version:
php7-in-jessie

Nachtrag
es wäre zu schön gewesen, um Wahr zu sein. Nach Aufruf von http://localhost/phpmyadmin zeigte sich mir folgendes Bild:
fehler-mysqli-erweiterung-fehlt
ein finales

# apt-get install php7.0-mysql

brachte den gewünschten Erfolg!
phpmyadmin-mysli-erweiterungPS: den Webserver startest Du neu mit:

/etc/init.d/apache2 restart

ein .vdi File mounten

vdi-file-mountUnter der VirtualBox von Oracle werden Festplattenabbilder normalerweise im Format .vdi abgelegt.
Dabei landet ein mehr oder weniger riesengrosser „Datenklumpen“ als einzige Datei auf der Festplatte.

Praktisch wäre es, von Linux direkt auf diese Datei zugreifen zu können, ohne das betreffende OS jeweils starten zu müssen…

Vergewissere Dich, ob das Pakte qemu bereits installiert ist. Wenn nicht, tippe

# apt-get install qemu

ein. Nun müssen wir das Modul nbd laden. Der Schalter max_part=16 verweist auf die maximale Anzahl an möglichen Partitionen. Partition 3 befindet sich dann z.B. unter nbd0p3

# modprobe nbd max_part=16

Jetzt laden wir das .vdi File

# qemu-nbd -c /dev/nbd0 FILENAME.vdi

und überprüfen, wie viele Partitionen sich nun unter nbd0pX befinden.

ls -l /dev | grep nbd*
brw-rw----  1 root disk       43,   0 Okt 31 11:33 nbd0
brw-rw----  1 root disk       43,   1 Okt 31 11:33 nbd0p1

die Partition muss noch eingehängt werden:

# mount /dev/nbd0p1 /mnt

das war’s bereits. Das .vdi-File kann nun unter /mnt wie ein normaler Ordner behandelt werden. Vergiss nicht am Ende die ganze Geschichte wieder auszuhängen und ggf. das Modul nbd zu beenden:

# umount /mnt
# qemu-nbd -d /dev/nbd0
# rmmod nbd

Paketabhängigkeit in Debian (hier an Google Earth)

das Installieren via Paketmanager ist in den meisten Fällen einfach. Dennoch kann beim Versuch (hier Google Earth) auf die Platte zu bekommen etwas schief gehen. Wobei „schief gehen“ im eigentlichen Sinne falsch ist! Hier geht nichts schief, sondern Debian kann schlicht und einfach ein Paket (hier lsb-core) nicht auflösen bzw. finden, welches für das zu installierende Programm relevant ist.
Wir laden uns von Google Earth die neuste Version herunter und installieren diese per dpkg:

# dpkg --install google-earth-stable_current_amd64.deb
Entpacken von google-earth-stable (7.1.4.1529-r0) ...
dpkg: Abhängigkeitsprobleme verhindern Konfiguration von google-earth-stable:
  google-earth-stable hängt ab von lsb-core (>= 3.2); aber:
  Paket lsb-core ist nicht installiert.
  (...)

in den meisten Fällen hilft hier ein: # apt-get -f install weiter:

# apt-get -f install
(...)
Die folgenden NEUEN Pakete werden installiert:
  (...) lsb-core (...)
(...)
E: Fehlschlag beim Holen von http://ftp.ch.debian.org/debian/pool/main/g/glibc/libc6-i386_2.19-18_amd64.deb  404  Not Found [IP: 2001:67c:10ec:3dd1::42 80]
E: Einige Archive konnten nicht heruntergeladen werden; vielleicht »apt-get update« ausführen oder mit »--fix-missing« probieren?

Tja, dann machen wir doch einfach das, was der Paketmanager von Debian vorschlägt…

# apt-get update
# apt-get upgrade
Probieren Sie »apt-get -f install«, um dies zu korrigieren.
Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 google-earth-stable : Hängt ab von: lsb-core (>= 3.2) ist aber nicht installiert
E: Unerfüllte Abhängigkeiten. Versuchen Sie, -f zu benutzen.

…und beenden das Ganze nochmals mit einem finalen:

# apt-get -f install
(...)
Vormals nicht ausgewähltes Paket lsb-core wird gewählt.
Vorbereitung zum Entpacken von .../lsb-core_4.1+Debian13+nmu1_amd64.deb ...
Entpacken von lsb-core (4.1+Debian13+nmu1) ...
(...)
lsb-core (4.1+Debian13+nmu1) wird eingerichtet ...
(...)

hat geklappt!
gestartet wird Google Earth mit:

/usr/bin/google-earth
google-earth-stable

google-earth-stable hat soeben alle nötigen Pakete installiert und kann gestartet werden. Ab jetzt kannst Du auf Entdeckungreise gehen. Hier das Stade de Suisse in Bern…

HINWEIS
um die verschiedenen Pakete zu analysieren oder zusätzliche Informationen darüber zu erhalten, kann man sich dpkg und/oder apt-cache bedienen. Nähere Informationen bekommst Du über die man-Pages der jeweiligen Befehle.

$ dpkg -l | grep lsb-core
$ apt-cache policy lsb-core
$ apt-cache showpkg lsb-core

und noch was: Fehlermeldungen sind da, um gelesen und verstanden zu werden!