osal.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/bin/sh
  2. # Identifies OS type and variant
  3. # Setups variables and provides OS-agnostic wrapper functions
  4. OS_TYPE=$(grep "^ID=" /etc/os-release | cut -f 2 -d '=' | sed -e 's/^"//' -e 's/"$//' | sed -e 's/\(.*\)/\L\1/')
  5. case "$OS_TYPE" in
  6. debian)
  7. OS_BASE='debian'
  8. OS_VERSION=$(cat /etc/debian_version|grep -o "[0-9]\{1,2\}"|head -n1)
  9. OS_CODENAME="$(cat /etc/os-release |grep VERSION= |cut -f 2 -d \(|cut -f 1 -d \))"
  10. ;;
  11. ubuntu)
  12. OS_BASE='debian'
  13. OS_VERSION="$(lsb_release -s -r)".
  14. OS_CODENAME="$(lsb_release -s -c)"
  15. ;;
  16. centos|rhel|fedora|redhat)
  17. OS_BASE='rhel'
  18. OS_VERSION=$(cat /etc/os-release | grep VERSION_ID | sed -e "s/VERSION_ID=//" | sed -e 's/^"//' -e 's/"$//')
  19. OS_CODENAME=''
  20. ;;
  21. *)
  22. OS_BASE='unknown'
  23. ;;
  24. esac
  25. OSAL_PATH="$(cd "$(dirname "$BASH_SOURCE")" >/dev/null 2>&1 ; pwd -P)"
  26. for OSAL_FILE in "osal_${OS_BASE}_based" \
  27. "osal_${OS_TYPE}" \
  28. "osal_${OS_TYPE}_${OS_VERSION}"
  29. do
  30. # Search for OS specific OSAL file and source it
  31. if [ -f "$OSAL_PATH/${OSAL_FILE}.sh" ]; then
  32. source "$OSAL_PATH/${OSAL_FILE}.sh"
  33. fi
  34. done
  35. # VAR=$(ini_get 'file' 'section' 'param' 'value')
  36. osal_ini_get() {
  37. #echo /usr/bin/crudini --get $@
  38. local retval=$(/usr/bin/crudini --get $@ 2>1)
  39. if [ $? -eq 0 ]; then
  40. echo $retval
  41. fi
  42. }
  43. # ini_set 'file' 'section' 'param' 'newvalue'
  44. osal_ini_set() {
  45. if [ "$OSAL_DEBUG" ]; then
  46. echo /usr/bin/crudini --set $@
  47. fi
  48. /usr/bin/crudini --set $@
  49. }
  50. # For use in osal_kv_*
  51. sed_escape() {
  52. sed -e 's/[]\/$*.^[]/\\&/g'
  53. }
  54. # Writes a value to a key-value file.
  55. # osal_kv_write 'path' 'key' 'value'
  56. osal_kv_write() {
  57. osal_kv_delete "$1" "$2"
  58. echo "$2=$3" >> "$1"
  59. }
  60. # Reads a value from a key-value file.
  61. # Exits successfully if it does.# value=$(osal_kv_read path key defaultvalue)
  62. osal_kv_read() {
  63. local kv_keyname=$(echo "$2" | sed_escape)
  64. if [ -f "$1" ]; then
  65. local retval=$(grep "^$kv_keyname\s*=" "$1" | sed "s/^$kv_keyname\s*=\s*//" | tail -1 | sed "s/^\([\"']\)\(.*\)\1\$/\2/g")
  66. if [ "$retval" ]; then
  67. echo $retval
  68. else
  69. echo $3
  70. fi
  71. else
  72. echo $3
  73. fi
  74. }
  75. # Deletes a value in a key-value file.
  76. osal_kv_delete() { # path, key
  77. local kv_keyname=$(echo "$2" | sed_escape)
  78. test -f "$1" && sed -i "/^${kv_keyname}\s*=.*$/d" "$1"
  79. }
  80. # Tests if a value exists in a key-value file.
  81. # Exits successfully if it does.
  82. osal_kv_haskey() { # path, key
  83. local kv_keyname=$(echo "$2" | sed_escape)
  84. test -f "$1" && grep "^${kv_keyname}\s*=" "$1" > /dev/null
  85. if [ $? -eq 0 ]; then
  86. return 0
  87. else
  88. return 1
  89. fi
  90. }
  91. # Tests if a boolean value is true in a key-value file.
  92. # Exits successfully if it does.
  93. osal_kv_read_bool() {
  94. local retval=$(osal_kv_read $@)
  95. if [ "${retval,,}" == "yes" ] \
  96. || [ "${retval,,}" == "true" ] \
  97. || [ "${retval,,}" == "on" ] \
  98. || [ "$retval" == "1" ]; then
  99. return 0
  100. else
  101. return 1
  102. fi
  103. }
  104. # Converts a boolean value to 'yes'/'no' (or two terms provided as second and third argument)
  105. # answer=$(osal_bool_tostring boolean_value yes_value no_value)
  106. osal_bool_tostring() {
  107. if [ "${1,,}" == "yes" ] \
  108. || [ "${1,,}" == "true" ] \
  109. || [ "${1,,}" == "on" ] \
  110. || [ "$1" == "1" ]; then
  111. if [ -n "$2" ]; then echo "$2"; else echo 'yes'; fi
  112. else
  113. if [ -n "$3" ]; then echo "$3"; else echo 'no'; fi
  114. fi
  115. }
  116. # Executes a process silently in the background while showing a spinner
  117. osal_execute_with_spinner() {
  118. if [ "$OSAL_DEBUG" ]; then
  119. echo "$@"
  120. $@
  121. else
  122. $@ > /dev/null 2>&1 &
  123. local BACK_PID=$!
  124. local spinner="/-\|"
  125. local spin_i=1
  126. while kill -0 $BACK_PID > /dev/null 2>&1 ; do
  127. printf "\b${spinner:spin_i++%${#spinner}:1}"
  128. sleep 0.5
  129. done
  130. # Do a blank echo to get the \n back
  131. echo
  132. fi
  133. }