Skip to main content

Primary links

  • Home
  • AI
  • Kubernetes
  • Incus
  • Ansible
  • Terraform
  • OpenStack
  • Virtualization
  • Linux
  • SmartHome
  • HowTo

Misc

  • Linux
    • Ubuntu
    • LTSP
    • HowTo
    • BASH
      • Scripts
      • check_http_access
      • extractEbook.sh
      • fdupes
      • fiXorg.sh
      • getUniqueFirstLetter.sh
      • mkBackup.sh
      • script-server
      • snippets
      • syncHome.sh
      • syncStore.sh
      • syncTs.sh
    • Backtrack
    • CUPS
    • CentOS
    • Debian
    • FreeNX
    • GRML
    • Gnome
    • Grub
    • IpFire
    • Kernel
    • Linux Lite
    • SSH
    • UEFI
    • dban
    • logrotate
    • parted
    • proxy
    • systemd
  • Hardware
  • Programming
  • Databases
  • Multimedia
  • Windows

Cloud

  • OpenStack
  • cloud-config
  • nextcloud

Virtualization

  • Virtualization
  • Incus
  • Docker
  • KVM
  • Kubernetes
  • LXC
  • LXD
  • QEMU
  • VMware
  • VirtualBox
  • multipass
  • podman
  • vagrant
  • XEN

Network

  • DNS
  • Firewall
  • Linux
  • OpenvSwitch
  • SSL
  • VLAN
  • VPN
  • iPXE
  • namespaces
  • nmcli
  • tcpdump

Storage

  • CEPH
  • DRBD
  • LVM
  • S3
  • ZFS
  • btrfs

Automation / CI/CD

  • Install
  • Ansible
  • GitLab
  • LLM
  • Preseed
  • Puppet
  • Terraform
  • Ubuntu autoinstall

Monitoring / Visualisation

  • Grafana
  • Icinga
  • Prometheus
  • Monitoring
  • ELK
  • mermaid
# switch
case "${FOO}" in
  abc)
    bar=123
    ;;
  *efg*|*hij*)
    bar=567
    ;;
  *)
    SYSADMIN=pko
    ;;
esac

# while
while true
    do
    echo .
    sleep 10
done

# and
if [ "$foo" == "a" ] && [ "$bar" == "b" ]; then

 # or
if [ "$foo" == "x" ] || [ "$bar" == "y" ]; then

# both
if ( [ "$a" == "a" ] || [ "$a" == "b" ] ) && ( [ "$b" == "c" ] ); then


# enable color output systemwide for ls and grep
cat <> /etc/profile.d/alias.sh
alias ls='ls --color=auto'
alias grep='grep --color=auto'
EOF

# get exitcode prevoius command
${PIPESTATUS[0]}

# redirect stdout AND stderr to file
COMMAND &> file.out

# sequence
echo {,my-}host{1,{3..5},9,10}
echo $(seq 1 4)

# random
$(((RANDOM%10)+1))

# for loop
START=1
END=10
for ((i=START; i<=END; i++)); do
    echo "i: $i"
done

# String regexp
if [[ "${MOTHERBOARD}" =~ H8DM(8|E)-2 ]] &&  [[ "${RAID}" =~ 9650SE-(4|8)LPML ]]; then
   echo "found"
fi

if [[ "$STR" =~ .*"$SUB".* ]]; then
  echo "It's there."
fi

# negate
if [[ ! $PATH =~ $temp ]]

# replace commas with spaces
${foo//,/ }

# remove non digit
echo "${MY_VAR//[!0-9]/}"

# endless loop
while true; do
  YOUR_COMMAND
done

# read from standard input
IN=$(cat /dev/stdin); echo $IN

# process specified files in directory
for i in *.$1
do
	 echo "$i" "${i%$1}$2"
done

# ping all clients
NET=192.168.1
for i in {1..254}; do
   ping  -w 1 -c 1 ${NET}.$i > /dev/null

   if [ $? -eq 0 ]; then
      echo ${NET}.$i
   fi
done

# parameter expansion
echo ${variable:-default_value}

#
# shell variables
#
# internal field separator
IFS=$(echo -en "\n\b")
567
# get calling (parent) script name
CALLING_SCRIPT=$(ps -o command= $PPID)
SCRIPT=${CALLING_SCRIPT##*/}

# ssh interactive login
ssh foo@www.example.com -t "bash -ic 'bar -vvv'"

# uppercase
x=bar
echo ${x^}
Bar
echo ${x^^}
BAR

# lowecase
x=BAR
echo ${x,}
bAR
echo ${x,,}
bar

VAR_3="Reverse Cases"
echo ${VAR_3~}
echo ${VAR_3~~}

# remote SSH command with wildcard
ssh ${SERVER_IP} sudo 'bash -c "ls -l /etc/*"'

# unset all variables with OS_ prefix
unset ${!OS_@}

Variables

$@ - parameter

Shortcuts
https://skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

test parameter count

if [ "$#" -eq 4 ]; then
    BMC_DNS=${1}
    BMC_IP=${2}
    HOST_DNS=${3}
    HOST_IP=${4}
elif [ "$#" -eq 2 ]; then
    BMC_DNS=${1}
    BMC_IP=$(dig +short ${BMC_DNS})
    HOST_DNS=${2}
    HOST_IP=$(dig +short ${HOST_DNS})
else
    echo "Usage: $0 BMC_DNS HOST_DNS"
    exit 1
fi

[ -z "${PROJECT}" ] && PROJECT=test

Run command on exit / interrupt

function cleanup {
    rm -f /tmp/$$/*.log
    rm -d /tmp/$$
}
trap cleanup SIGINT

Check

[ -L ~/bar ] || ln -s ~/foo ~/bar

Customize colors
https://misc.flogisoft.com/bash/tip_colors_and_formatting

# cleanup color
tput init

Customize BASH prompt
https://wiki.archlinux.de/title/Bash-Prompt_anpassen

echo PS1="'"'\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@web1-dev:\w\$'"'" >> .bashrc

set

set -a # auto export variables
set -x # debug / show commands

Array
https://linuxconfig.org/how-to-use-arrays-in-bash-script

declare -a DHCP_PING_STATE

NETWORK_PING_STATES+=("${NETWORK_ID} ${NETWORK_NAME} ${ROUTER_PING_STATE} $(echo ${DHCP_PING_STATE[@]})")

for NETWORK_PING_STATE in "${NETWORK_PING_STATES[@]}"; do
    echo "${NETWORK_PING_STATE}"
done | column -t

Source .bashrc

ssh -t vm1 bash -ic '"pyenv install 3.5.10 -s"'

Debug output

DEBUG=1
((${DEBUG})) && echo foo

Auto relogin to root

touch ~/.bash_profile
echo "sudo su -" >> ~/.bash_profile

Online BASH script check
https://www.shellcheck.net/

Links
https://devhints.io/bash
http://misc.flogisoft.com/bash/tip_colors_and_formatting - Formatting
https://www.dartmouth.edu/~rc/classes/ksh/special-vars.html
http://wiki.bash-hackers.org/commands/classictest - BASH test commands
http://www.linuxtutorialblog.com/post/tutorial-conditions-in-bash-scripting-if-statements

Profiles GitHub StackOverflow LinkedIn Xing
Contact Imprint
© panticz 2026

Cookie-Einstellungen

Diese Website nutzt eingebettete Inhalte von Drittanbietern (z.B. YouTube, SoundCloud). Beim Laden dieser Inhalte werden Daten an die jeweiligen Anbieter übermittelt. Datenverarbeitungserklärung