From 2d708258731417bb7b2ecb805c9e23594ff97b08 Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Sat, 20 Feb 2010 11:18:04 -0600 Subject: [PATCH 1/1] Initial import --- example.sh | 16 ++++++++++++++ lib/sh/ansi.sh | 42 +++++++++++++++++++++++++++++++++++ lib/sh/ask.sh | 20 +++++++++++++++++ lib/sh/env.sh | 35 +++++++++++++++++++++++++++++ lib/sh/log.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++ lib/sh/progress.sh | 26 ++++++++++++++++++++++ lib/sh/root.sh | 15 +++++++++++++ lib/sh/skel.sh | 8 +++++++ 8 files changed, 217 insertions(+) create mode 100755 example.sh create mode 100644 lib/sh/ansi.sh create mode 100644 lib/sh/ask.sh create mode 100644 lib/sh/env.sh create mode 100644 lib/sh/log.sh create mode 100644 lib/sh/progress.sh create mode 100644 lib/sh/root.sh create mode 100644 lib/sh/skel.sh diff --git a/example.sh b/example.sh new file mode 100755 index 0000000..fc7ebcb --- /dev/null +++ b/example.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Source shlib +_root="$(dirname "${0}")"; . "${_root}/lib/sh/env.sh" + +want log ask + +note This is a note. +log ...and a log... +warn ...warning... + +log "Are you sure?" +yn || err you said no + +err the end + diff --git a/lib/sh/ansi.sh b/lib/sh/ansi.sh new file mode 100644 index 0000000..53a757c --- /dev/null +++ b/lib/sh/ansi.sh @@ -0,0 +1,42 @@ +# Include me for neat color defines! + +if [ -z "${__ansi_sh_loaded}" ] +then + __ansi_sh_loaded=yes + + # ANSI formats + e="$(printf "\033")" + a_normal="$e[0m" + + # ANSI colors + a_red="$e[1;31m" + a_green="$e[1;32m" + a_yellow="$e[1;33m" + a_blue="$e[1;34m" + a_purple="$e[1;35m" + a_cyan="$e[1;36m" + a_white="$e[1;37m" + a_gloom="$e[1;30m" + + a_crimson="$e[0;31m" + a_forest="$e[0;32m" + a_brown="$e[0;33m" + a_navy="$e[0;34m" + a_violet="$e[0;35m" + a_aqua="$e[0;36m" + a_gray="$e[0;37m" + a_black="$e[0;30m" + + a_bred="$e[41m" + a_bgreen="$e[42m" + a_bbrown="$e[43m" + a_bblue="$e[44m" + a_bpurple="$e[45m" + a_bcyan="$e[46m" + a_bgray="$e[47m" + a_bblack="$e[40m" + + a() { + eval "echo \${a_$1}" + } +fi diff --git a/lib/sh/ask.sh b/lib/sh/ask.sh new file mode 100644 index 0000000..5990f78 --- /dev/null +++ b/lib/sh/ask.sh @@ -0,0 +1,20 @@ +# Simple query library script + +if [ -z "${__ask_sh_loaded}" ] +then + __ask_sh_loaded=yes + + yn() { + def="${1:-n}"; shift + while true + do + [ "${#}" -gt 0 ] && printf "${*} " + read _res + case "${_res:-${def}}" in + [Yy]*) return 0 ;; + [Nn]*) return 1 ;; + *) echo "bad response!"; continue ;; + esac + done + } +fi diff --git a/lib/sh/env.sh b/lib/sh/env.sh new file mode 100644 index 0000000..42e879e --- /dev/null +++ b/lib/sh/env.sh @@ -0,0 +1,35 @@ +# Base environment script + +if [ -z "${__env_sh_loaded}" ] +then + if [ -z "${_root}" -o ! -d "${_root}" ] + then + printf "\033[1;31mSet _root to the directory containing lib/sh before sourcing this file!\033[0m\n" + kill $$ + fi + + __env_sh_loaded=yes + + realpath() { + ( cd "${1}"; pwd ) + } + + __env_libdir="$(realpath "${_root}/lib/sh")" + want() { + while [ -n "${1}" ] + do + if [ -f "${__env_libdir}/${1}.sh" ] + then + . "${__env_libdir}/${1}.sh" + else + printf "\033[1;31mFailed to load '${1}'\033[0m\n" + fi + shift + done + } + + err() { + echo " ** ${*}" + exit 1 + } +fi diff --git a/lib/sh/log.sh b/lib/sh/log.sh new file mode 100644 index 0000000..429f428 --- /dev/null +++ b/lib/sh/log.sh @@ -0,0 +1,55 @@ +# Include for convenience log functions +# Set _log_to_stderr to send messages to stderr as well, for logging + +if [ -z "${__log_sh_loaded}" ] +then + __log_sh_loaded=yes + + want ansi + + logf() { + printf "${@}" + [ -n "${_log_to_stderr}" ] && printf "${@}" >&2 + } + + note() { + printf " ${a_cyan}*${a_normal} " + echo "${*}" + [ -n "${_log_to_stderr}" ] && echo "* note: ${*}" >&2 + } + + log() { + printf " ${a_green}*${a_normal} " + echo "${*}" + [ -n "${_log_to_stderr}" ] && echo "* log: ${*}" >&2 + } + + warn() { + printf " ${a_yellow}*${a_normal} " + echo "${*}" + [ -n "${_log_to_stderr}" ] && echo "* warn: ${*}" >&2 + } + + err() { + printf " ${a_red}*${a_normal} " + echo "${*}" + [ -n "${_log_to_stderr}" ] && echo "* err: ${*}" >&2 + exit 1 + } + + chk() { + _res=$? + if [ $# -gt 0 ] + then + out=$("${@}") + _res=$? + fi + if [ ${_res} -gt 0 ] + then + [ -n "${*}" ] && echo " ${a_red}*${a_normal} in '$(pwd)': cmd '${*}' failed with status ${_res}" + [ -n "${out}" ] && printf " ${a_red}*${a_normal} Output:\n${out}\n" + echo "" + kill $$ + fi + } +fi diff --git a/lib/sh/progress.sh b/lib/sh/progress.sh new file mode 100644 index 0000000..fea648c --- /dev/null +++ b/lib/sh/progress.sh @@ -0,0 +1,26 @@ +# Progress library script + +if [ -z "${__progress_sh_loaded}" ] +then + __progress_sh_loaded=yes + + # Implement a simple progress indicator + # ( i:current i:total i:width -- s: + progress() { + local time_last + + cur="${1}" + all="${2}" + width="${3:-78}" + + time="$(date +%s)" + + prcnt="$(printf "%u / %u * 100\n" "${cur}" "${all}" | bc -l 2>/dev/null)" + elapsed="$(printf "%u - %u\n" "${time}" "${time_start}" | bc -l 2>/dev/null)" + remain="$(printf "( %u - %u ) / ( %u / %u )\n" "${all}" "${cur}" "${cur}" "${elapsed}" | bc -l 2>/dev/null)" + + time_last="${time}" + + printf "%0.2f%% E:%us R:%0.1fs" "${prcnt:-0}" "${elapsed:-0}" "${remain:-0}" + } +fi diff --git a/lib/sh/root.sh b/lib/sh/root.sh new file mode 100644 index 0000000..7a4e60f --- /dev/null +++ b/lib/sh/root.sh @@ -0,0 +1,15 @@ +# Only allow the script to continue if running as root + +if [ -z "${__root_sh_loaded}" ] +then + __root_sh_loaded=yes + + if [ "$(id -u)" -gt 0 ] + then + want ansi + echo "" + echo "${a_red}I need root!${a_normal}" + echo "" + exit 1 + fi +fi diff --git a/lib/sh/skel.sh b/lib/sh/skel.sh new file mode 100644 index 0000000..63bc60a --- /dev/null +++ b/lib/sh/skel.sh @@ -0,0 +1,8 @@ +# Skeleton library script + +if [ -z "${__skel_sh_loaded}" ] +then + __skel_sh_loaded=yes + + # Put your stuff here +fi -- 2.42.0