|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/bin/sh
- #The script inserts or replaces an ini field where $1 is the path of the target file and $2 is the value to add or replace. $2 has the form section:property=value. It only cares about the first instance of $2
-
- file=$2
- change=$3
- section=$(printf $change | cut -d ':' -f 1)
- property=$(printf $change | cut -d ':' -f 2)
- property_type=$(printf $property | cut -d '=' -f 1)
- ex_blank='^\s*$'
- ex_any_sec='^\[.*\]$'
- #ex_sec='/^\[$section\]/,/^\[.*\]$\|^\s*$/'
-
- check_args() {
- if [ $1 -ne $2 ]; then
- printf "Invalid number of arguments. Expected $2\n$@\n"
- exit;
- fi
- return 0;
- }
-
- replace() {
- sed -i "/^\[$section\]/,/$ex_any_sec\|$ex_blank/ {s/^$property_type=.*$/$property/ }" $1
- }
-
- add() {
- #Check if the section exists. If not, abort.
- if [ -z "$(sed "/^\[$section\]$/p" $1)" ]; then printf "section $section does not exist. Aborting.\n" exit; fi
- sed -i "/^\[$section\]/a $property" $1
- }
-
- insert() {
- #Check if the field is already there
- field=$(sed -n "/^\[$section\]/,/$ex_any_sec\|$ex_blank/ {/^$property_type=.*$/p}" $1)
-
- if [ -z $field ]; then add $1; else replace $1; fi
- }
-
- get() {
- #Prints a section of the ini file
- sed -n "/^\[$section\]/,/$ex_any_sec\|$ex_blank/ p" $1
- }
-
- make() {
- sed -i "$ G; $ a [$section]" $1
- }
-
- sdelete() {
- sed -i "/^\[$section\]/,/$ex_any_sec\|$ex_blank/ {/$ex_any_sec/! d; /\[$section\]/d}" $1
-
- }
-
- check_args $# 3
- case $1 in
- insert) insert $2 $3;;
- get) get $2 $3;;
- make) make $2 $3;;
- sdelete) sdelete $2 $3;;
- *) printf "invalid command $1";;
- esac
|