2017-06-03 21:43:46 +00:00
|
|
|
# To implement a for loop:
|
|
|
|
for file in *;
|
|
|
|
do
|
|
|
|
echo $file found;
|
|
|
|
done
|
|
|
|
|
|
|
|
# To implement a case command:
|
|
|
|
case "$1"
|
|
|
|
in
|
|
|
|
0) echo "zero found";;
|
|
|
|
1) echo "one found";;
|
|
|
|
2) echo "two found";;
|
|
|
|
3*) echo "something beginning with 3 found";;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# Turn on debugging:
|
|
|
|
set -x
|
|
|
|
|
|
|
|
# Turn off debugging:
|
|
|
|
set +x
|
|
|
|
|
|
|
|
# Retrieve N-th piped command exit status
|
|
|
|
printf 'foo' | fgrep 'foo' | sed 's/foo/bar/'
|
|
|
|
echo ${PIPESTATUS[0]} # replace 0 with N
|
|
|
|
|
|
|
|
# Lock file:
|
|
|
|
( set -o noclobber; echo > my.lock ) || echo 'Failed to create lock file'
|
|
|
|
|
|
|
|
# Fork bomb
|
|
|
|
:(){ :|:& };:
|
|
|
|
|
|
|
|
# Unix Roulette
|
|
|
|
# (Courtesy of Bigown's answer in the joke thread)
|
|
|
|
# DANGER! Don't execute!
|
|
|
|
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo Click #Roulette
|
2017-12-03 01:53:55 +00:00
|
|
|
|
|
|
|
# for loop in one line
|
|
|
|
for i in $(seq 1 4); do echo $i; done
|
|
|
|
|
2017-12-03 13:02:43 +00:00
|
|
|
# Test if a program exists in the path
|
|
|
|
# There are false positives: aliases and functions
|
|
|
|
command -v ${program} >/dev/null 2>&1 || error "${program} not installed"
|
2017-12-03 01:53:55 +00:00
|
|
|
|
|
|
|
# Redirection
|
2017-12-03 13:02:43 +00:00
|
|
|
# Please note that 2>&1 goes after
|
|
|
|
my_command > command-stdout-stderr.txt 2>&1
|
|
|
|
my_command > /dev/null 2>&1
|
2018-08-28 14:28:57 +00:00
|
|
|
# Redirect stdout and stderr of cmd1 to cmd2
|
|
|
|
cmd1 |& cmd2
|
|
|
|
|
|
|
|
# Convert spaces to underscores in filenames
|
|
|
|
for name in *\ *; do mv -vn "$name" "${name// /_}"; done
|