BASH - Run a program or script - Run a bunch of commands in sequence
To run a bunch of commands just put semicolons between the commands:
date ; free; date
returns:
Thu 4 Feb 13:30:42 GMT 2021 total used free shared buff/cache available Mem: 65872344 7039056 47427116 929180 11406172 57177400 Swap: 999420 0 999420 Thu 4 Feb 13:30:42 GMT 2021
NOTE: As can be seen the same command can be run multiple times.
Here the date command is run twice.
ALERT: Running commands in sequence can be bad.
For example:
cd /foo; rm *
NOTE: The idea here is to erase all the files in directory foo (but not sub-directories; -r is needed for that).
But what if the cd fails? Then all the files in the current directory will be erased instead. Not good!
Far better to use:
cd /foo && rm *
NOTE: The && is just like in C; this is the AND operator.
Nearly all BASH programs return a 0 error status for true and anything else is false.
- That allows programmers to return an error code for failure and which returns a false.
To test, this rather use the following (which does not include the rm for safety).
cd /foo && ls # Not rm so we don't do anything bad by mistake.
If /foo exists, the cd command will return 0 which is true.
- That means the result of the AND could be true and therefore execution continues with the ls.
- However, if the cd fails, the result will be false.
- If any input to an AND function is false, the other values does not matter.
- Therefore, as soon as anything returns false, the whole thing stops.
- So if there is no /foo, the ls command will not execute at all.
OR
There is also an OR operator || that quits as soon as anything returns true.
grep "dummy" /etc/passwd || echo No such user
NOTE: Try this command using an actual user instead of dummy to see what is returned when this succeeds.