Difference between revisions of "Bash"

From DWIKI
m
m
Line 14: Line 14:


 
 


= Tips and tricks =
= Tips and tricks =
Line 89: Line 90:


  export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"
  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 ==
== functions ==
Line 97: Line 102:


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

Revision as of 19:26, 24 November 2021

 


Tips and tricks

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}

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 $1 $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