Friday, April 23, 2021
Bash trap - signal trapping with Unix shell
Linux/Unix shell/Bash trap command "Trap" can be used to execute a function/command on receiving certain signal. To list down all available signals, do "trap -l"
# trap -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAXPlease refer to https://www.computerhope.com/unix/utrap.htm for more information on this. Example common usage in a shell script, to perform cleanup when EXIT signal detected. Maybe to delete certain temporary files upon receiving CTRL+C. Example script
#!/bin/bash cleanup(){ echo echo "running cleanup here" echo "delete temporary files?" echo } trap cleanup EXIT read -p "Press enter to continue" read -p "Press enter to continue again" read -p "Press enter to continue again"When run, on receiving CTRL+C while the script is running (before the last line) will trigger the "cleanup" function.
# ./test.sh Press enter to continue Press enter to continue again^C running cleanup here delete temporary files?
Tuesday, April 20, 2021
Bash select - Creating simple menu with the Unix shell "select" loop
Bash select command creates a menu from a list of items. The syntax is quite similar as the "for loop". Please refer to link below for more info https://linuxize.com/post/bash-select/ https://linuxhint.com/bash_select_command/ Lets do a quick test. Create a simple for loop as below and run it.
#!/bin/bash for i in the quick brown fox jumps over the lazy dog do echo $i doneYou will get a list of word as below.
# ./test.sh the quick brown fox jumps over the lazy dogNow modify the script as below. Replace "for" with "select". Add "break" just under the "echo" line.
#!/bin/bash select i in the quick brown fox jumps over the lazy dog do echo word selection = $i break doneNow run the script and you will get below output.
# ./test.sh 1) the 2) quick 3) brown 4) fox 5) jumps 6) over 7) the 8) lazy 9) dog #? 6 word selection = overNote that, without "break", the script will keep on prompting the selection until you hit CTRL+C.
Monday, April 19, 2021
Bash array - how to use arrays in Unix shell
myArray=(the quick brown fox jumps over the lazy dog)But how to read an array?. Lets try this;
#!/bin/bash myArray=(the quick brown fox jumps over the lazy dog) echo $myArrayRun it ...
# ./test.sh theIt will only echo the 1st word from the array. Lets try another example.
#!/bin/bash myArray=(the quick brown fox jumps over the lazy dog) echo ${myArray[0]} echo ${myArray[1]} echo ${myArray[2]} echo ${myArray[3]} echo ${myArray[4]} echo ${myArray[5]} echo ${myArray[6]} echo ${myArray[7]} echo ${myArray[8]} echo ${myArray[9]}Run it ...
# ./test.sh the quick brown fox jumps over the lazy dogNow, It will print all array content. Note that, it won't give any alert if the index is out of bound, for this example = "${myArray[9]}" Lets do a proper way to read an array by using "for loop";
#!/bin/bash myArray=(the quick brown fox jumps over the lazy dog) for i in ${myArray[@]} do echo $i doneRun it ...
# ./test.sh the quick brown fox jumps over the lazy dogYou will get above output. Adding an "!" to the array name will change the loop from looping through the values to looping through the indices.
#!/bin/bash myArray=(the quick brown fox jumps over the lazy dog) for i in ${!myArray[@]} do echo $i doneRun it ...
# ./test.sh 0 1 2 3 4 5 6 7 8Example below is using "while loop" to loop through the array.
#!/bin/bash myArray=(the quick brown fox jumps over the lazy dog) index=0 while [ $index -lt ${#myArray[@]} ] do echo $index = ${myArray[index]} index=`expr $index + 1` doneRun it ...
# ./test.sh 0 = the 1 = quick 2 = brown 3 = fox 4 = jumps 5 = over 6 = the 7 = lazy 8 = dogHere are some syntax list that might be useful.
Syntax | Result |
myArray=() | Create an empty array |
myArray=(1 2 3) | Initialize array |
${myArray[2]} | Retrieve all elements |
${myArray[@]} | Retrieve all elements |
${!myArray[@]} | Retrieve array indices |
${#myArray[@]} | Calculate array size |
myArray[0]=3 | Overwrite 1st element |
myArray+=(4) | Append value(s) |
${arr[@]:s:n} | Retrieve n elements starting at index s |
Subscribe to:
Posts
(
Atom
)