Der Code-Schnippsel-Thread
-
-
$ ./taschenrechner.sh Taschenrechner1. Zahl eingeben: 232. Zahl eingeben: 23Operation (+, -, *, /) wählen: *./taschenrechner.sh: Zeile 13: [: Zu viele Argumente.Produkt: 529
Wollts nur ma weiterleiten, hab aber auch keine Ahnung von so Skripten -
Zitat von thosch97
Wollts nur ma weiterleiten, hab aber auch keine Ahnung von so Skripten
Danke. Ist zwar nicht relevant, aber ich habe zu Beginn von check_operator() einmal vergessen, den Parameter zu quoten, sodass die Shell für den Stern eine Pfaderweiterung durchgeführt und alle Dateien im aktuellen Verzeichnis eingesetzt hat – was bei dir vermutlich zu weitaus mehr als einem Parameter geführt hat. In meiner „Entwicklungsumgebung“ war da aber nur die taschenrechner.sh. -
Mein CGI-Status-Shellskript am Heimserver sieht im Übrigen jetzt schon so aus und hat eine durchschnittliche Laufzeit von etwa 300 ms.
Spoiler anzeigen
Code
Alles anzeigen#!/bin/dash # testen, ob von anderem Skript oder Webserver aufgerufen # wenn letzteres, HTTP-Header ausgeben PARENT=`ps h -p $PPID -o command` if test ${PARENT%% /*} != /bin/dash; then echo "Content-Type: text/html; charset=UTF-8" echo fi unset PARENT echo "<h2>Allgemeine System-Informationen</h2>\n<ul>" echo "\t<li>Kernel: `uname -sr`</li>" if uptime | grep -q day; then echo "\t<li>Uptime: `uptime | sed -r 's/.*([0-9]+) day[s]?,\s*([0-9]+:[0-9]{2}),.*$/\1d \2/'`</li>" else echo "\t<li>Uptime: `uptime | sed -r 's/.* up {1,2}([0-9]+:[0-5][0-9]),.*$/\1/'`</li>" fi echo "\t<li>Anzahl angemeldete User: `who | wc -l`</li>" echo "\t<li>Load Average: `uptime | sed 's/^.*load average: \(.*\)$/\1/'`</li>" PROCDATA=`head -n 1 /proc/stat | sed -r 's/\s+/\+/g' | cut -d + -f 2-8` # normale und "genicete" Prozesse PROC_USER=$((`echo $PROCDATA | cut -d + -f 1-2`)) # Kernel-Prozesse, I/O-Aktivitäten und Hardware/Software-IRQs PROC_SYSTEM=$((`echo $PROCDATA | cut -d + -f 3,5-7`)) PROC_TOTAL=$((`echo $PROCDATA`)) PERC_USER=`echo "scale=1;100*$PROC_USER/$PROC_TOTAL" | bc` PERC_SYSTEM=`echo "scale=1;100*$PROC_SYSTEM/$PROC_TOTAL" | bc` echo "\t<li>Durchschnittliche CPU-Auslastung: ${PERC_USER}% Benutzer-, ${PERC_SYSTEM}% Kernel-Modus</li>\n</ul>" unset PROC_USER PROC_SYSTEM PROC_TOTAL PERC_USER PERC_SYSTEM echo "<h2>Thermik</h2>\n<ul>" sensors | grep -e '^PSU' -e '^M/B' -e '^CPU' | tr "+." " ," | \ sed -r 's/,0//;s/:\s+([0-9])/: \1/;s/^/\t\<li\>/;s/\s+\(div.*\)$//;s/.C\s+$/ Grad Celsius/;s/$/\<\/li\>/' echo "</ul>" echo "<h2>BOINC</h2>" TEMPFILE=$(mktemp) boinccmd --get_simple_gui_info 2>/dev/null >$TEMPFILE if test -s $TEMPFILE; then LINE=`grep -nE '^={8} Results' $TEMPFILE | cut -d: -f1`; LINE=$((LINE+1)) tail -n +$LINE $TEMPFILE | grep -e ^[0-9]*\) -e '^\s*report' -e '^\s*ready to report' \ -e '^\s*current CPU time:' -e '^\s*fraction done:' -e '^\s*estimated CPU time' | \ sed -r 's/^([0-9]+)\).*$/<\/ul>\n<h3>Aufgabe \1<\/h3>\n<ul id="boincstats">/;s/^\s+(.*)$/\t<li>\1<\/li>/' | \ tail -n +2 echo "</ul>" else echo "<p>BOINC läuft gerade nicht.</p>" fi rm -f $TEMPFILE unset TEMPFILE LINE
-
Bash
Alles anzeigen#!/bin/bash # Dieses Script parsed die Rechnung von Netzclub, um zu sehen wie viel Traffic man im Monat gemacht hat # Autor: Alexander Feld <shadowing@fsfe.org> # Lizenz: Wahlweise Beerware oder Coffeeware # Benötigt: bash, pdftotext, grep, sed # Erklärung für unten: # pdftotext Dokumente/BuildUsagePDF.pdf - | grep -i internet | sed 's/Internet//' | sed 's/ //' | sed 's/KB//' | sed '/^ *$/d' # 1 2 3 4 5 6 # 1: PDF in einen Text umwandeln und das ganze auf stdout # 2: Nach dem Wort "Internet" greppen # 3: Das Wort "Internet" entfernen # 4: freistehende Leerzeichen entfernen # 5: Das Wort "KB" entfernen # 6: Leerzeilen entfernen # sed ruulez! for i in $(pdftotext Dokumente/BuildUsagePDF.pdf - | grep -i internet | sed 's/Internet//' | sed 's/ //' | sed 's/KB//' | sed '/^ *$/d') do trafficKB=$(($trafficKB + $i)) done trafficMB=$(( $trafficKB / 1024 )) echo "Traffic: $trafficKB KB" echo " $trafficMB MB"
Da ich nur Einzelbeträge per Rechnung bekam und keinen Gesamtbetrag
-
-
Zitat von friedrichheinze
Nicht ganz. Da die zweite Wertzuweisung den gesetzten Wert auch zurückliefert, wird "on" ins Browser-Fenster geschrieben. Damits nutzbar wird, muss man die letzte Anweisung in void() wrappen:Zum Herunterladen von ein paar Dateien in der Konsole muss man unter Windows sich nicht erst wget besorgen, PowerShell reicht auch.
-
Bash
#!/bin/bash export datum=$(date +%Y%m%d) mkdir $datum scp root@over900:/home/user/MyDocs/DCIM/$datum*.jpg $datum/ cd $datum for i in *.jpg do mv $i $(echo $i | sed "s/$datum//" | sed "s/_//") done cd -
Nichts wirklich großes/aufwändiges, aber in meinen Augen ungemein praktisch und zeitsparend:
Lädt alle Bilder des heutigen Tages per SCP vom N900 herunter und packt sie in ein Verzeichnis mit dem aktuellen Datum. Danach wird noch der Datumsteil aus dem Dateinamen entfernt. Somit bekomme ich in Zukunft meine Bilder nach Datum in Verzeichnissen sortiert auf den Rechner.EDIT: Der Hostname ist natürlich anzupassen
-
Naja nicht wirklich Code, sondern ne Config für PXELinux - aber eventuell trotzdem hilfreich
Code
Alles anzeigenroot@stuart[~] 17:45:38 # cat /var/lib/tftpboot/pxelinux.cfg/default DEFAULT vesamenu.c32 ALLOWOPTIONS 0 PROMPT 0 TIMEOUT 0 MENU BACKGROUND bg.jpg MENU TITLE Stuarts Bootserver LABEL - MENU LABEL Installer: MENU DISABLE LABEL ubuntu32 MENU LABEL Ubuntu 11.04 32bit KERNEL ubuntu32/linux APPEND initrd=ubuntu32/initrd.gz vga=788 LABEL ubuntu64 MENU LABEL Ubuntu 11.04 64bit KERNEL ubuntu64/linux APPEND initrd=ubuntu64/initrd.gz vga=788 LABEL squeeze32 MENU LABEL Debian Squeeze 32bit KERNEL squeeze32/linux APPEND initrd=squeeze32/initrd.gz vga=788 LABEL squeeze64 MENU LABEL Debian Squeeze 64bit KERNEL squeeze64/linux APPEND initrd=squeeze64/initrd.gz vga=788 LABEL lenny32 MENU LABEL Debian Lenny 32bit KERNEL lenny32/linux APPEND initrd=lenny32/initrd.gz vga=788 LABEL lenny64 MENU LABEL Debian Lenny 64bit KERNEL lenny64/linux APPEND initrd=lenny64/initrd.gz vga=788 LABEL wheezy32 MENU LABEL Debian Wheezy 32bit KERNEL wheezy32/linux APPEND initrd=wheezy32/initrd.gz vga=788 LABEL wheezy64 MENU LABEL Debian Wheezy 64bit KERNEL wheezy64/linux APPEND initrd=wheezy64/initrd.gz vga=788 LABEL fedora32 MENU LABEL Fedora 12 32bit KERNEL fedora32/linux APPEND initrd=fedora32/initrd.img LABEL fedora64 MENU LABEL Fedora 12 64bit KERNEL fedora64/linux APPEND initrd=fedora64/initrd.gz MENU SEPARATOR LABEL - MENU LABEL Livesysteme: MENU DISABLE LABEL grml MENU LABEL GRML KERNEL grml/linux26 APPEND root=/dev/nfs rw nfsroot=10.23.1.1:/grml boot=live lang=us nomce quiet apm=power-off nodhcp noprompt noeject initrd=grml/minirt26.gz vga=791
Damit habe ich sowohl die Installer für häufig genutzte Distributionen sowie ein GRML-Livesystem (prima als Rescuesystem) auf jedem PC zur Hand, der Netzwerkboot unterstützt.
-
-
Wird von mir schon lange intern verwendet, ich lads jetzt mal hoch
Bash
Alles anzeigen#!/bin/bash # shadowGallery # Kleines Script, um mal eben schnell ne HTML-Galerie mit Thumbnails zu machen # Benötigt imagemagick und bash # Autor: Alexander Feld <shadowing@fsfe.org> # Lizenz: GNU/GPLv2 THUMBHOEHE=320 THUMBBREITE=240 mkdir thumbs touch index.html echo "Titel der Galerie?" read titel echo "Lege index.html an.." echo "<!doctype html>" > index.html echo "<html>" >> index.html echo "<head>" >> index.html echo " <title>$titel</title>" >> index.html echo " <meta charset=\"utf-8\">" >> index.html echo " <meta name=\"generator\" content=\"shadowGallery 0.9\">" >> index.html echo " <meta name=\"author\" content=\"$(whoami)\">" >> index.html echo "</head>" >> index.html echo "<body style=\"font-family: sans-serif; font-size: 11pt\">" >> index.html echo " <h1>$titel</h1>" >> index.html echo " <div style=\"margin-top: 0px; margin-bottom: 20px;\">" >> index.html echo " Um ein Bild in voller Größe zu sehen, einfach anklicken!" >> index.html echo " </div>" >> index.html echo " <div>" >> index.html for datei in *.jpg do echo "Konvertiere Bild $datei.." convert -resize $(echo $THUMBHOEHE)x$(echo $THUMBBREITE) $datei thumbs/$datei echo "Füge Bild $datei in die Galerie hinzu.." echo " <a href=\"$datei\"><img src=\"thumbs/$datei\" alt=\"Bild $datei\"></a>" >> index.html done echo " </div>" >> index.html echo "</body>" >> index.html echo "</html>" >> index.html exit 0
Was natürlich fehlt, ist eine Überprüfung ob die anzulegenden Sachen bereits existieren. Und auch sollte ich mal in der for-Schleife andere Endungen als jpg berücksichtigen. Aber bin ich bisher zu faul für
-
C
Alles anzeigen#include <iostream> #include <cstdlib> #include <time.h> /* * ---------------------------------------------------------------------------- * "THE PIZZA-WARE LICENSE" (Revision 23): * <thosch97@googlemail.com> wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a pizza in return Thomas Schneider * ---------------------------------------------------------------------------- */ using namespace std; int main(void) { cout << "Bitte geben Sie die Anzahl der Tropfen ein: "; int tropfenanzahl; cin >> tropfenanzahl; long double pi; int gesamt = tropfenanzahl; int innerhalb = 0; srand ( time(NULL) ); while(tropfenanzahl > 0) { double dotx = ((double) rand()) / RAND_MAX; double doty = ((double) rand()) / RAND_MAX; if (dotx*dotx + doty*doty <= 1) { innerhalb++; } //cout << (gesamt-tropfenanzahl)+1 << ". Durchgang" << endl; tropfenanzahl--; } pi = 4*(long double)innerhalb/gesamt; cout << "Pi ist ungefähr " << pi << endl; return 0; }
Mit freundlicher Hilfe von gandro.
(Für die Windowsler die das Ergebnis sehen wollen gibts btw unter http://t23h.de/files/pi.exe n fertigen Build)
NEU Jetzt mit downloadbaren Source (http://t23h.de/files/pi.cpp) und ELF-64Bit-x86-Build für Linux (http://t23h.de/files/pi.elf) -
Zitat von thosch97C
Alles anzeigen#include <iostream> #include <cstdlib> #include <time.h> /* * ---------------------------------------------------------------------------- * "THE PIZZA-WARE LICENSE" (Revision 23): * <thosch97@googlemail.com> wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a pizza in return Thomas Schneider * ---------------------------------------------------------------------------- */ using namespace std; int main(void) { cout << "Bitte geben Sie die Anzahl der Tropfen ein: "; int tropfenanzahl; cin >> tropfenanzahl; long double pi; int gesamt = tropfenanzahl; int innerhalb = 0; srand ( time(NULL) ); while(tropfenanzahl > 0) { double dotx = ((double) rand()) / RAND_MAX; double doty = ((double) rand()) / RAND_MAX; if (dotx*dotx + doty*doty <= 1) { innerhalb++; } //cout << (gesamt-tropfenanzahl)+1 << ". Durchgang" << endl; tropfenanzahl--; } pi = 4*(long double)innerhalb/gesamt; cout << "Pi ist ungefähr " << pi << endl; return 0; }
Mit freundlicher Hilfe von gandro.
(Für die Windowsler die das Ergebnis sehen wollen gibts btw unter http://t23h.de/files/pi.exe n fertigen Build)Dir ist klar, dass dein Build unter Windows 98 nicht geht? Wenn ich das durch Dev C++ jage, gehts aber
-
-
Lua-Script was die Anzahl Verbindungen in einem ZNC-basierten Bouncer zählt und entsprechend die Nicknames setzt.
Code
Alles anzeigenrequire "irc" local select = require "socket".select local TIMEOUT = 20 local NICK_ON = "gandro" local NICK_OFF = "gandro[off]" local NICK_AWAY = "gandro[thc]" local CONNECTION = { host = "rizonbnc.eu.rizon.net", port = 1234, password = "gandro:PasswortFürBNC" } local DEBUG = false local s = irc.new({nick = NICK_ON}) local lastUpdate = 0 function checkClients() local time = os.time() if os.difftime(time, lastUpdate) > TIMEOUT then s:sendChat("*status", "ListClients") lastUpdate = time end end function handleClients(clients, old_nick) if old_nick ~= NICK_ON and old_nick ~= NICK_OFF and old_nick ~= NICK_AWAY then return end local new_nick = NICK_ON if #clients == 1 then new_nick = NICK_OFF elseif #clients == 2 then new_nick = NICK_AWAY end if new_nick ~= old_nick then s:send("NICK %s", new_nick) end end local clients = nil s:hook("OnChat", function(user, me, msg) if user.nick ~= "*status" then return end if msg:find("| Host %s+ |") then clients = {} return elseif clients == nil then return end if msg:find("%+%-+%+") then if #clients > 0 then handleClients(clients, me) clients = nil end else ip = msg:match("|%s+(%d+%.%d+%.%d+%.%d+)%s+|") table.insert(clients, ip) end end) if DEBUG then s:hook("OnRaw", function(line) print(line) end) end s:connect(CONNECTION) while true do checkClients() select({s.socket}, nil, TIMEOUT) s:think() end
IRC-Bibliothek ist https://github.com/JakobOvrum/LuaIRC
-
ist LUA kühl?
-
Lua ist als Sprache sehr cool, weil minimalistisch - hat aber (da ANSI C als Plattform) eine sehr beschränkte Standardbibliothek, man braucht also für jeden Scheiss (Sockets, Dateisystem-Operationen) ne Bibliothek. Und die haben jeweils ihre eigenen Design-Patterns, was grosse Programme recht unübersichtlich machen kann.
-
Wireshark-Filter für MP3-Downloads und anderes Audio-Material. Nützlich wenn irgendwo ein Flash-Player „gestreamte“ Musik abspielt, die man mit Wireshark oder einem Befehl wie
mitgeschnitten hat und dann ganz einfach aus dem TCP-Stream und dem enthaltenen HTTP-Response direkt als Audiodatei extrahieren kann.
Zitat von thosch97…, wird daher ne PE sein und das wird Win98 wahrscheinlich nicht können.
Deiner Logik zufolge kann Windows 98 also wahrscheinlich keine 32-Bit-Anwendungen ausführen? -
Zitat von DosAmp
Deiner Logik zufolge kann Windows 98 also wahrscheinlich keine 32-Bit-Anwendungen ausführen?Ach ups, das war in meinen Gedanken irgendwie ein Mischmasch aus "Win98==Dos zum anklicken" und Portable Executable mit Preinstallation Envirenment assoziiert…
Klar, türlich kann 98 32-Bit krams ausführenAllerdings wird es wohl so sein dass zu moderne Programme (selbst ohne DirecX 10 und so weiter) die wenn man sie nochmal kompiliert laufen würden nicht direkt unter älteren Windows-Versionen laufen.
-
Code
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] "C:\\Windows\\regedit.exe"="RUNASINVOKER"
Registry-Eintrag, um den Registry-Editor auch unter einem Admin-Konto standardmäßig mit normalen Berechtigungen ohne einen UAC-Prompt auszuführen. Nützlich, wenn man häufiger nur mal einen Schlüssel nachschlägt oder Teile der Registry bearbeitet, die keine erhöhten Rechte benötigen (d. h. HKEY_CURRENT_USER).
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!