UNIX/Linux Shell CheatSheet : free A4
PDF (52Kb) |
PNG (90Kb)
#!/bin/sh
trap cleanup 1 2 3 6
cleanup()
{
echo "Caught Signal ... cleaning up."
rm -rf /tmp/temp_*.$$
echo "Done cleanup ... quitting."
exit 1
}
### main script
for i in *
do
sed s/FOO/BAR/g $i > /tmp/temp_${i}.$$ && mv /tmp/temp_${i}.$$ $i
done
trap statement tells the script to run cleanup() on signals 1, 2, 3 or 6.
The most common one (CTRL-C) is signal 2 (SIGINT). This can also be used for quite interesting purposes:
#!/bin/sh
trap 'increment' 2
increment()
{
echo "Caught SIGINT ..."
X=`expr ${X} + 500`
if [ "${X}" -gt "2000" ]
then
echo "Okay, I'll quit ..."
exit 1
fi
}
### main script
X=0
while :
do
echo "X=$X"
X=`expr ${X} + 1`
sleep 1
done
kill -9 <PID> without getting the chance to process it.
Here is a table of some of the common interrupts:
| Number | SIG | Meaning |
|---|---|---|
| 0 | 0 | On exit from shell |
| 1 | SIGHUP | Clean tidyup |
| 2 | SIGINT | Interrupt |
| 3 | SIGQUIT | Quit |
| 6 | SIGABRT | Abort |
| 9 | SIGKILL | Die Now (cannot be trap'ped) |
| 14 | SIGALRM | Alarm Clock |
| 15 | SIGTERM | Terminate |
Note that if your script was started in an environment which itself was ignoring signals (for example, under
nohup control), the script will also ignore those signals.

My blog has tips about how to use Unix and Linux commands