how to write a bash script like the ones used in init.d?
I have to write a bash script that makes lot of things.开发者_运维技巧 I'd like to print messages as nice as init scripts do. For example:
Doing A... [OK]
Doing B... [ERROR]
....
Do you know any way to make this?
Thanks in advance
On all my Linux boxes, the code to do that is in the file:
/etc/init.d/functions
If you include that file (. /etc/init.d/functions
) and then run your code doing this:
action /path/to/prog args
you will get the functionality you want.
The /etc/init.d/*
scripts follow a fairly easy to use template. Just find one and copy and modify it.
The [OK]
/ [ERROR]
stuff is done by sourcing the file /etc/init.d/functions
within your script (at the top generally).
use printf. I like having things color coded too. :)
Here's the preamble I use in my scripts to setup the colors and a few printf statements...
#!/bin/bash
# checkload.sh - script to check logs for errors.
#
# Created by Ryan Bray, rbray@xxx.com
set -e
# Text color variables
txtund=$(tput sgr 0 1) # Underline
txtbld=$(tput bold) # Bold
txtred=$(tput setaf 1) # Red
txtgrn=$(tput setaf 2) # Green
txtylw=$(tput setaf 3) # Yellow
txtblu=$(tput setaf 4) # Blue
txtpur=$(tput setaf 5) # Purple
txtcyn=$(tput setaf 6) # Cyan
txtwht=$(tput setaf 7) # White
txtrst=$(tput sgr0) # Text reset
And then I have statements like this that use colors in the output:
printf "Checking for descrepancies in $LOAD_DATE$ADD_COMP\n"
DELTAS=$(awk 'BEGIN { FS = "\"" } {print $24,$26,$28}' $COMP_FILE)
if [[ "$DELTAS" == *[1-9]* ]]; then
printf "%74s[${txtred}FAIL${txtrst}]\n"
printf "$COMP_FILE contains descrepancies.\n"
exit 1
else
printf "%74s[${txtgrn}PASS${txtrst}]\n"
fi
Hope this helps!
-Ryan
精彩评论