Bashscripting Grundlagen
Original Website This is a quick reference to getting started with Bash scripting. Learn bash in y minutes (learnxinyminutes.com) Bash Guide (mywiki.wooledge.org) Example
1 2 3 4 5 |
#!/usr/bin/env bash NAME="John" echo "Hello $NAME!" |
Variables
1 2 3 4 5 |
NAME="John" echo $NAME echo "$NAME" echo "${NAME}!" |
String quotes
1 2 3 4 |
NAME="John" echo "Hi $NAME" #=> Hi John echo 'Hi $NAME' #=> Hi $NAME |
Shell execution
1 2 3 4 |
echo "I'm in $(pwd)" echo "I'm in `pwd`" # Same |
See Command substitution Conditional execution
1 2 3 |
git commit && git push git commit || echo "Commit failed" |
Functions
1 2 3 4 5 6 |
get_name() { echo "John" } echo "You are $(get_name)" |
See: Functions Conditionals
1 2 3 4 5 6 |
if [[ -z "$string" ]]; then echo "String is empty" elif [[ -n "$string" ]]; then echo "String is not empty" fi |
See: Conditionals Strict mode
1 2 3 |
set -euo pipefail IFS=$'\n\t' |
See: Unofficial bash strict mode Brace […]
Bash Inhalte darstellen – Echo, Tput, Printf
Um Text im Terminal auszugeben, gibt es drei verschiedene Befehle bzw. Programme: echo, printf und tput. Echo und printf geben nur Text aus, mit printf kann die Ausgabe nach einem definierten Muster vorgeben werden. Mit tput besteht die Möglichkeit den Cursor auf dem Bildschirm zu bewegen oder Informationen über den Status des Terminals abzurufen bzw. […]
Bash / Shell Menus – NCurses Menus
Einfache Menüs oder Auswahloptionen können neben den grafischen Werkzeugen wie beispielsweise Zenity auch in rein textbasierter Form für Shells umgesetzt werden. Eine Möglichkeit ist die Eingabe ein aus dem Menü aufgezeigten Wertes, eine Andere die direkte Auswahl der Menüeinträge. Möglichkeit 1 – Darstellung eines Menüs mit direkter Eingabe Die Darstellung/Formatierung eines Menüs kann entweder über […]
Posix Klammerausdrücke
POSIX-Klammerausdrücke POSIX-Klammerausdrücke sind eine besondere Art von Zeichenklassen. POSIX-Klammerausdrücke entsprechen einem Zeichen aus einer Reihe von Zeichen, genau wie normale Zeichenklassen. Sie verwenden dieselbe Syntax mit eckigen Klammern. Ein Bindestrich erzeugt einen Bereich und ein Caret am Anfang negiert den Klammerausdruck. Ein wesentlicher syntaktischer Unterschied besteht darin, dass der Backslash KEIN Metazeichen in einem POSIX-Klammerausdruck […]
UniCode Symboltabellen
Mit Hilfe der Unicodes lassen sich nahezu alle bekannten Zeichen aller Sprachen und Sonderzeichen sowie Symbole darstellen. Die Ausgabe kann mit printf ‚\u<CODE> oder echo -e \u<CODE> erfolgen und ist auch mit verschiedenen Farben möglich. Auf den folgenden Seiten sind Unicode Zeichentabellen gelistet. https://unicode-table.com/de/ https://graphemica.com Codebeispiele Symbol Unicode Hex Code Printf Code Comment ✔ 2714 […]
Email Benachrichtigung bei SSH Login
Eine weitere Methode Linux Server abzusichern, ist der Versandt einer E-Mail bei jedem erfolgreichen SSH Login an eine definierte E-Mail Adresse. Voraussetzung dafür ist ein funktionierender Mail-TtransferAgent (MTA) wie z.B. Postfix auf dem Server. Script zum Versandt der E-Mail via eingerichtetem MTA Hierzu wird ein Script unter /usr/local/bin/mail-ssh-login.sh mit folgendem Inhalt erstellt:
1 2 3 4 5 6 7 |
HostIP=$(hostname -I | tr " " "\n" | sort -u | sed /^$/d ) ClientIP="$(last | head -n1 | grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}")" MailSubjectLine="SSH Login on $(hostname) ($HostIP) from $ClientIP @ $(date "+%F %H:%M:%S")" MailBody="$MailSubjectLine \n\n $(finger) \n\n $(last)" echo "$MailBody" | mailx -s "$MailSubjectLine" root |
Um das […]
Findgrep – Volltextsuche für die Shell
Vor einiger Zeit fand ich ein Script, dass die Volltextsuche via Shell ermöglicht und dabei die letzten Eingaben wie Suchmuster und Pfad speichert. Zum Einsatz kommen dabei find, grep und figlet. Ich konnte den Author des Scriptes nicht mehr ermitteln.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
#!/bin/bash # FINDGREP INFO ######################## PROGRAMINFO="findgrep version 6. This Script simplifies the recursive search of any given string in a given directory. It combines find and grep. Results are logged for later viewing and analyzing. findgrep remembers directories and search strings for following searches." PROGRAMINFO2="To change the path for logging of queries, please edit \$SAVEFILE in this script. Searches are case insensitive by default. Written by LinuxNetzer. www.netz10.de. contact: linuxnetzer-*-aet-*-netz10.de. findgrep v6 is released under GPL v3." # CHANGELOG ############################# # Script now remembers directories and search strings. # Logfile now moved to /tmp. # Changed to more userfriendly interface. # Added many comments for better script reading. # DEBUG MODE ############################ # set -x # uncomment for debugging # DEFINING SESSION SETTINGS ############# ROOTDIR="$HOME/.findgrep" # place to store files SAVEDIR="/$ROOTDIR/remember.dir" # last search directory SAVESTRING="/$ROOTDIR/remember.string" # last search string ######################################### if [ ! -f $ROOTDIR ] # file storage directory exists? then mkdir $ROOTDIR # if not: create directory fi ######################################### if [ ! -f $SAVEDIR ] # last search directory defined? then echo $HOME > $SAVEDIR # if not, set to: home directory fi ######################################### if [ ! -f $SAVESTRING ] # last search string defined? then echo $USER > $SAVESTRING # if not, set to: user name fi # VARIABLES ############################# PROGNAME="findgrep v6" # name of program SAVEFILE="$ROOTDIR/.findgrep.log" # log file location SEARCHDIR="`cat $SAVEDIR`" # load search directory SEARCHSTRING="`cat $SAVESTRING`" # load search string DIVIDER="--------------------------------------------------" # better viewing # FUNKTION HEADER ####################### HEADER () { clear echo " __ _ _ / _(_)_ __ __| | __ _ _ __ ___ _ __ | |_| | '_ \ / _. -- _. | '__/ _ \ '_ \ | _| | | | | (_| | (_| | | | __/ |_) | |_| |_|_| |_|\__,_|\__, |_| \___| .__/ |___/ |_| " | grep --color . echo " Recursive Text String Search Tool" | grep --color . echo } # CHOOSE DIRECTORY TO SEARCH ############ HEADER echo "Search in Directory: $SEARCHDIR ?" | grep --color ? echo "If OK, press ENTER. To change please enter new path." read -e INPUT if [ "$INPUT" != "" ] then echo $INPUT > $SAVEDIR SEARCHDIR="$INPUT" fi HEADER echo "Searching in: $SEARCHDIR " | grep --color $SEARCHDIR # CHOOSE TEXTSTRING TO SEARCH #################### echo "Search for: $SEARCHSTRING ?" | grep --color ? echo "if OK, press ENTER. To change please enter new searchstring." read -e INPUT2 if [ "$INPUT2" != "" ] then echo $INPUT2 > $SAVESTRING SEARCHSTRING="$INPUT2" fi echo "$SEARCHSTRING" | grep --color . # SUMMARY ######################################## HEADER echo "SUMMARY:" echo "Searching in: $SEARCHDIR" | grep --color $SEARCHDIR echo "Searching for: $SEARCHSTRING" | grep --color $SEARCHSTRING echo "Logging to: $SAVEFILE" | grep --color $SAVEFILE echo $DIVIDER echo "Now starting recursive search for $SEARCHSTRING in $SEARCHDIR..." echo $DIVIDER echo "SEARCH RESULTS:" | grep --color "SEARCH RESULTS" export GREP_COLOR="31" # EXECUTE ######################################### find $SEARCHDIR -type f -exec grep -i $SEARCHSTRING --exclude=$SAVEFILE /dev/null {} \; 2> /dev/null | tee $SAVEFILE | grep -i --color $SEARCHSTRING # DISPLAY RESULTS ################################ echo $DIVIDER export GREP_COLOR="01;31" # fett, rot echo "Search in $SEARCHDIR: finished" | grep --color . echo "Found \"$SEARCHSTRING\": `cat $SAVEFILE | wc -l`" | grep --color . echo "Results saved to: $SAVEFILE" | grep --color . echo $DIVIDER echo $PROGRAMINFO2 echo $DIVIDER exit |
by Speefak
Bash ( Bourne Again SHell ) History konfigurieren
Die bash-Shell ist inzwischen die meist genutzte Consolen-Shell unter Linux/Unix. Das geht schon so weit, dass Start-Scripte direkt für die Bash geschrieben sind, oder gar der Befehl /bin/sh nur noch ein Link auf /bin/bash ist. Bash-History richtig nutzen Die Bash verfügt über eine Art Erinnerungsvermögen: Sie merkt sich, welche Befehle man bereits eingegeben hat. Wenn […]