the for loop

when the user wants a command to be run exactly x times

for i in $(seq 1 5); do echo $i; done
# for example generate a file with 1 million lines
# and messure the time it takes for the computer to generate those lines
time for i in $(seq 1 1000000); do echo "generating line number $i"; echo "$i another line to test if the editor can handle it" >> temp.txt; done

took lenovo t440 laptop with i5 and ssd:

generating line number 999996
generating line number 999997
generating line number 999998
generating line number 999999
generating line number 1000000

real	0m27.398s
user	0m19.728s
sys	0m7.492s

half a minute to generate this file

then for some reason it generates 1 million and 1 line

wc -l temp.txt; # count line numbers in file
1000001 temp.txt

du -hs temp.txt; # file syze
54M	temp.txt; # 54MBytes

not exactly 1 million

while loop

if user wants a “infinity” “endless” loop

for example this elaborate “one liner”

will give the user constant updates on changes to dmesg (the last 20 lines)

while also giving the user update on what is going on with the harddisks

while true; do echo '===========' date '+DATE: %Y-%m-%d TIME: %H:%M:%S'; dmesg|tail -n20; lsblk -o "NAME,MAJ:MIN,RM,SIZE,RO,FSTYPE,MOUNTPOINT,UUID"; sleep 1; clear; done

conditional while loop example:

#!/bin/sh
a=0
while [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

iterate over files

# find all files of type m4a in the current dir and all subdirs
# and pass the found files to another scripts
find . -type f -iname *.m4a -exec /scripts/convert.sh {} \;

# find all picture.jpg files larger than 45k
# in the current dir and all subdirs
# and copy them to dir /path/to/recovery
find . -type f -size +45k -iname *.jpg -exec cp -rv {} /path/to/recovery \;
admin