как написать сценарий bash, как те, которые используются в init.Ди?
Я должен написать сценарий bash, который делает много вещей. Я хотел бы печатать сообщения так же хорошо,как сценарии init. Например:
Doing A... [OK]
Doing B... [ERROR]
....
вы знаете, как это сделать?
спасибо заранее
3 ответов
на всех моих Linux-боксах код для этого находится в файле:
/etc/init.d/functions
Если вы включите этот файл (. /etc/init.d/functions
), а затем запустите свой код, делая это:
action /path/to/prog args
вы получите функциональность, которую хотите.
на /etc/init.d/*
скрипты следуют довольно простому в использовании шаблону. Просто найдите один, скопируйте и измените его.
на [OK]
/ [ERROR]
материал делается путем поиска файла /etc/init.d/functions
в вашем скрипте (в верхней части вообще).
использовать функции printf. Мне тоже нравится, когда вещи закодированы по цвету. :)
вот преамбула, которую я использую в своих сценариях для настройки цветов и нескольких операторов printf...
#!/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
и тогда у меня есть такие утверждения, которые используют цвета в выводе:
printf "Checking for descrepancies in $LOAD_DATE$ADD_COMP\n"
DELTAS=$(awk 'BEGIN { FS = "\"" } {print ,,}' $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
надеюсь, что это помогает!
-Райан