1. Check if a file path represented by environment variable exists
[[ "$(cat ${ENV_VARIABLE})" ]] || printf "env is not exported."
2. Get the file name from the full path
echo "$basename -a /home/foo/abc.txt"
# Output
abc.txt
3. Extract the specific cell value from a table output
For example, the output of the command nomad node status -address=https://127.0.0.1:4646
ID DC Name Class Drain Eligibility Status
d88b0888 dc1 oscarzhou-B550-AORUS-ELITE-AX-V2 <none> false eligible ready
If we want to get value of the datacenter dc1 where is [2,2] in the array. The solution is
nomad node status -address=https://127.0.0.1:4646 | awk 'NR==2{print $2}'
# Output
dc1
For awk, the index starts from 1 not 0. NR==2 specifies the line number, {print $2} specifies the column number.
4. Determine the boolean variable
if [ "$var" = true ]; then
...
fi
5. Add menu/option
function menu() {
PS3='Please select the option: '
OPTIONS=(
'foo'
'bar'
'Quit'
)
select opt in "${OPTIONS[@]}"
do
case $opt in
'foo')
function_foo
;;
'bar')
function_bar
;;
'Quit')
break
;;
esac
done
}
# check if the function exists (bash specific)
if [ "$#" -eq 0 ]; then
menu
else
"$@"
fi
6. Print colorful words
ERROR_COLOR='\033[0;31m';
HIGHLIGHT_COLOR='\033[0;32m';
NO_COLOR='\033[0m';
printf "${HIGHLIGHT_COLOR}Success (green)${NO_COLOR}\n"
printf "${ERROR_COLOR}Failure (red)${NO_COLOR}\n"
7. Compare string
if [[ "${foo}" == "foo" || "${foo}" == "bar" ]]; then
...
fi
8. If condition
# Multi-condition
if [[ "${foo}" == "foo" || "${foo}" == "FOO" ]]; then
...
elif if [[ "${foo}" == "bar" || "${foo}" == "BAR" ]]; then
...
fi
# Check if a variable is empty
if [ -z "$foo" ]; then
printf "${ERROR_COLOR}foo is empty${NO_COLOR}\n"
exit;
fi
#
9. Extract the basic semantic version (semver) from file
grep -o '[0-9]*\.[0-9]*\.[0-9]*' <file>
Enjoyed this article? Support my work with a coffee ☕ on Ko-fi.