# — # Config functions # This file is a part of Bashly
standard library # # Usage: # - In your script, set the CONFIG_FILE variable. For rxample: # CONFIG_FILE=settings.ini. # If it is unset, it will default to 'config.ini'. # - Use any of the functions below to access the config file. # —
# Create a new config file. # There is normally no need to use this function, it is used by other # functions as needed. config_init() {
CONFIG_FILE=${CONFIG_FILE:=config.ini} [[ -f "$CONFIG_FILE" ]] || touch "$CONFIG_FILE"
}
# Get a value from the config. # Usage: result=$(config_get hello) config_get() {
key=$1 regex="^$key *= *(.+)$" config_init while IFS= read -r line || [ -n "$line" ]; do if [[ $line =~ $regex ]]; then value="${BASH_REMATCH[1]}" break fi done < "$CONFIG_FILE" echo "$value"
}
# Add or update a key=value pair in the config. # Usage: config_set key value config_set() {
key=$1 shift value="$*" config_init regex="^($key) *= *.+$" output="" found_key="" while IFS= read -r line || [ -n "$line" ]; do newline=$line if [[ $line =~ $regex ]]; then found_key="${BASH_REMATCH[1]}" newline="$key = $value" output="$output$newline\n" elif [[ $line ]]; then output="$output$line\n" fi done < "$CONFIG_FILE" if [[ -z $found_key ]]; then output="$output$key = $value\n" fi printf "%b\n" "$output" > "$CONFIG_FILE"
}
# Delete a key from the config. # Usage: config_del key config_del() {
key=$1 regex="^($key) *=" output="" config_init while IFS= read -r line || [ -n "$line" ]; do newline=$line if [[ $line ]] && [[ ! $line =~ $regex ]]; then output="$output$line\n" fi done < "$CONFIG_FILE" printf "%b\n" "$output" > "$CONFIG_FILE"
}
# Show the config file config_show() {
config_init cat "$CONFIG_FILE"
}
# Return an array of the keys in the config file. # Usage: # # for k in $(config_keys); do # echo “- $k = $(config_get ”$k“)”; # done # config_keys() {
regex="^([a-zA-Z0-9_\-\/\.]+) *=" config_init keys=() while IFS= read -r line || [ -n "$line" ]; do if [[ $line =~ $regex ]]; then key="${BASH_REMATCH[1]}" keys+=("$key") fi done < "$CONFIG_FILE" echo "${keys[@]}"
}
# Returns true if the specified key exists in the config file. # Usage: # # if config_has_key “key” ; then # echo “key exists” # fi # config_has_key() {
[[ $(config_get "$1") ]]
}