CS 279 - Week 14 Lecture 1 - 2022-11-28 TODAY WE WILL * announcements/reminders * can you "return" from a Bash function? * Bash shell case statement * some "about your system" UNIX/Linux commands * [if time] some "just fun utilities" UNIX/Linux commands * prep for next class * IF you have a chance: please TRY to log into vlinux.humboldt.edu and e-mail me letting me know if you could or could not do so; ===== CAN you return something from a Bash function? ===== * answer: kind of...! * four ways to attempt such a kluge: 1. Change the state of a "global" variable [I wouldn't call that returning...! more like a persistent change due to the function...] 2. Use the exit command with a return value to end the function (and that exit status will be available then via $?) * BUT!! if a function calls exit, that also ends/exits the calling shell script...! * demo: funct-exit.sh and call-funct-that-exits.sh 3. Use the return command to end the function (but not the calling shell script or other calling function!) and its given value becomes the *exit status* for that function call * to access this "returned" value, then, need to use $? * demo: funct-return.sh and call-funct-that-returns.sh 4. echo desired output to standard output. which can be accessed by the caller if called, say, with backquotes for example, value=`my_funct a b c` * ironically, "looks" closest to a tradional-ish function return...? * demo: see echo3-demo.sh ===== Bash shell case statement! ===== * Bash has a case statement! * basic syntax: case <expr> in <patt1>) <command> <command> ;; <patt2>) <command> <command> ;; ... *) <command> <command> ;; esac * semantics: it compares the <expr> to each pattern in turn, and as soon as it matches one, it does that pattern's actions, and then exits the case statement (patterns are file globbing patterns...) * NOTE: the *) case is optional -- if NO cases' patterns match the expression, none of the case branches are taken ******** * AFTER CLASS addition: ******** * (thanks to a class member! 8-) ) * yes, you CAN combine cases -- put | between the patterns; for example, Moo | MOO | mOO) echo "this worked! Handles Moo or MOO or mOO" ;; * and example demoing this IS now included in case-play.sh ===== some commands "about the system" ===== ----- uname ----- * especially with argument -a * can give you information about the OS being run, and with -a, also info about the hardware being run; ----- uptime ----- * gives an idea of how long the system has been running since its last reboot/restart, how many "users", and the load average of the system over the last 1, 5, and 15 minutes * rough definition: load average is a way to gauge how many processes are, on average, concurrently demanding CPU attention (from: https://superuser.com/questions/23498/what-does-load-average-mean-on-unix-linux ) little less rough, but still a little rough: The average sum of the number of processes waiting in the run-queue plus the number currently executing over 1, 5, and 15 minute time periods (from: http://www.lifeaftercoffee.com/2006/03/13/unix-load-averages-explained/ ) ----- who ----- * what users are currently logged into the system ----- top ----- * displays and updates sorted information about processes top ...for desired_username's processes, use -u option: top -u desired_username * q to quit top; -- ^c also works to stop it