Some bash copy pasta

When you’re a programmer, you often need some scripting. But you always have to google because you don’t remember it all. Here’s some stuff I often need copy pasting from stackoverflow, gathered into one place

For loop

# Loop from 1 to 5; 5 inclusive
for I in {1..5}; do
    echo $I
done
Loop with step
# Loop from 1 to 10 at a step of 2
for I in {1..10..2}; do 
    echo $I
done
Loop through decimal numbers

Bash only supports integer arithmetic. So you would need to use something else

# Loop from 0 to 1 at a step of 0.1; 1 inclusive
for I in $(seq 0 0.1 1); do 
    echo $I; 
done

While loop

# Loop from 1 to 5; 5 exclusive
I=0
while [ $I -lt 5 ]; do
    echo $I
    I=$(($I+1))
done
Reading a file line by line
while read LINE; do
    echo $LINE
done < myfile.txt
Reading a delimited text file

Say you have a csv file with multiple fields. A while loop can be used to read the file and split the fields given the IFS (internal field separator) properly.

The field separator of a csv is a comma. So to use a while loop in a comma/ some other character separated file, you need to specify the IFS

#myfile.csv
Ann,15
Adam,20
Trump,3,stupid
Zach
while IFS=, read NAME AGE; do 
     echo Name: $NAME Age: $AGE
done < myfile.csv
#output
Name: Ann Age: 15
Name: Adam Age: 20
Name: Trump Age: 3,stupid
Name: Zach Age:

Default IFS in Linux is the whitespace. Therefore, there is no need of specifying IFS for a space separated file

Reading a delimited file skipping the header

Put an extra read command for the header and put the whole thing in a compound statement.

{
read
while IFS=, read NAME AGE; do 
     echo Name: $NAME Age: $AGE
done 
} < myfile.csv

Random numbers and shuffling

Bash has a RANDOM variable which gives you a random positive int each time. The number is in the range [0,32767]

#Just a random number
echo $RANDOM

#A random float in [0,1] using `bc`
bc <<< "scale=2; $RANDOM / 32767"
Shuffling

You can shuffle strings/ file lines/ arrays using shuf. Use head -nX to get the number of selections you want

#Shuffle array
A=(1 2 3 4 5 6 7 8)
shuf -e ${A[@]}

#Select 3 random numbers from string
A="1 2 3 4 5 6 7 8"
shuf -e $A | head -n3

#Shuffle lines of a file
shuf myfile.txt

Checking input arguments

Important copy paste to check input arguments of a file / bash function

if [[ $# -ne 2 ]]; then
  echo "Usage: ./myscript.sh <myinput> <myoutput>"
  exit 1
fi

Leave a comment

Design a site like this with WordPress.com
Get started