Bash

From DWIKI
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

 

 

Tips and tricks

Globbing

Globbing except strings

GLOBIGNORE="*.error.log"

String manipulation

Remove character from string

VERSION='2.3.3'
echo "${VERSION//.}"

check if var contains substring

$foo =~ .*sub.*

get first character of a string

FIRST=${STRING:0:1}


Date manipulation

Age of a file

stat -C %Y $FILE

read without while loop

The problem is scope, try

echo foo bar | { read a b;echo $b; }

check if variable is integer

if [[$foo =~ ^[0-9]+$]]

 

 

move cursor

^b move back 1 char
^f move forward 1 char
alt-b move back 1 word
alf-f move forward 1 word

loops

loop through range of numbers

for i in {0..10};do echo $i;done

 

exit while loop

break

 

skip one in loop

continue

bash history timestamp

HISTTIMEFORMAT="%d/%m/%y %T "

screen and bash history

To make sure all screens write to same history (at least on CentOS and RHEL):

echo "history -a;history -r" > /etc/sysconfig/bash-prompt-screen
chmod +x /etc/sysconfig/bash-prompt-screen

In general:

export PROMPT_COMMAND='history -n'

or

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"

add extensions to filenames

find . -type f |while read i;do if ! $i =~ .*.txt;then mv -v $i $i.txt;fi;done

 

functions

function foo() {
   echo "one: $1 two: $2"
 }
foo "first param" 2

convert units

function convertunits() {

       C="$1"
       U="$2"
       debug "converting $C $U"
       case $U in
               "KiB") O=$((C*1000)) ;;
               "MiB") O=$((C*1000*1000)) ;;
               "GiB") O=$((C*1000*1000*1000)) ;;
               "TiB") O=$((C*1000*1000*1000*1000)) ;;
               *) O="convert error in $U" ;;
       esac
       if [ -z "$O" ];then O="convert_error for unit $U";fi
       echo "$O"

}

Check if disk is mounted

mountpoint /mnt/foo

Get local IP address

ip route get 1 | awk '{print $NF;exit}'

FAQ

unary operator expected

try qouting your vars


failing I-search backward

When stuck at that, try

^g

bash: printf: 60.29: invalid number

Check $LC_NUMERIC