====== 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.