[1709] | 1 | #!/bin/bash |
---|
| 2 | |
---|
| 3 | # |
---|
| 4 | # Fonctions utiles pour les scripts de Pack IPSL |
---|
| 5 | # |
---|
| 6 | |
---|
| 7 | function DEM_read_state { |
---|
| 8 | # Lire l'état du pack pour une simulation |
---|
| 9 | local L_CONFIG_FILE=${1} |
---|
| 10 | local L_CONFIG_CARD=${2} |
---|
| 11 | |
---|
| 12 | local L_OLD_STATE=$( grep ${L_CONFIG_CARD} ${L_CONFIG_FILE} | awk '{print $2}' ) |
---|
| 13 | |
---|
| 14 | if [ ${?} -eq 0 ] |
---|
| 15 | then |
---|
| 16 | echo ${L_OLD_STATE} |
---|
| 17 | return 0 |
---|
| 18 | else |
---|
| 19 | return 1 |
---|
| 20 | fi |
---|
| 21 | return 0 |
---|
| 22 | } |
---|
| 23 | |
---|
| 24 | function DEM_write_state { |
---|
| 25 | # Mettre à jour l'état du pack pour une simulation |
---|
| 26 | |
---|
| 27 | local L_CONFIG_FILE=${1} |
---|
| 28 | local L_CONFIG_CARD=${2} |
---|
| 29 | local L_NEW_STATE=${3} |
---|
| 30 | |
---|
| 31 | local L_OLD_LINE=$( grep ${L_CONFIG_CARD} ${L_CONFIG_FILE} ) |
---|
| 32 | [[ ${?} -eq 0 ]] || ( return 1 ; ) |
---|
| 33 | local L_OLD_STATE=$( echo ${L_OLD_LINE} | awk '{print $2}' ) |
---|
| 34 | [[ ${?} -eq 0 ]] || ( return 1 ; ) |
---|
| 35 | |
---|
| 36 | L_NEW_LINE="${L_CONFIG_CARD} ${L_NEW_STATE}" |
---|
| 37 | |
---|
| 38 | if [[ ! -f ${L_CONFIG_FILE}.lock ]] |
---|
| 39 | then |
---|
| 40 | touch ${L_CONFIG_FILE}.lock |
---|
| 41 | sed -i "s%${L_OLD_LINE}%${L_NEW_LINE}%" ${L_CONFIG_FILE} |
---|
| 42 | rm -f ${L_CONFIG_FILE}.lock |
---|
| 43 | else |
---|
| 44 | DEM_log -0 "Erreur. Verrou sur le fichier : ${L_CONFIG_FILE}" |
---|
| 45 | return 1 |
---|
| 46 | fi |
---|
| 47 | |
---|
| 48 | return 0 |
---|
| 49 | } |
---|
| 50 | |
---|
| 51 | function DEM_min { |
---|
| 52 | # Calcul du minimum d'un nombre quelconque d'entiers |
---|
| 53 | local l_min=${1} l_xx |
---|
| 54 | |
---|
| 55 | for l_xx in ${*:2:${#}} |
---|
| 56 | do |
---|
| 57 | [[ ${l_xx} -lt ${l_min} ]] && l_min=${l_xx} |
---|
| 58 | done |
---|
| 59 | echo ${l_min} |
---|
| 60 | } |
---|
| 61 | |
---|
| 62 | function DEM_max { |
---|
| 63 | # Calcul du maximum d'un nombre quelconque d'entiers |
---|
| 64 | local l_max=${1} l_xx |
---|
| 65 | |
---|
| 66 | for l_xx in ${*:2:${#}} |
---|
| 67 | do |
---|
| 68 | [[ ${l_xx} -gt ${l_max} ]] && l_max=${l_xx} |
---|
| 69 | done |
---|
| 70 | echo ${l_max} |
---|
| 71 | } |
---|
| 72 | |
---|
| 73 | function DEM_log { |
---|
| 74 | # Affichage d'un message sur stdout et dans un fichier de log |
---|
| 75 | # DEM_log [-0|-1|-2|-3] Message |
---|
| 76 | # |
---|
| 77 | local MESSAGE P_LINE |
---|
| 78 | LOG_LEV=${LOG_LEV:-3} |
---|
| 79 | local OPTARG OPTIND L_LOG=1 |
---|
| 80 | local L_DEM_LOG=${DEM_LOG:-dem_log.${$}} |
---|
| 81 | |
---|
| 82 | while getopts 0123 l_name |
---|
| 83 | do |
---|
| 84 | case ${l_name} in |
---|
| 85 | ( 0 ) L_LOG=1 ;; |
---|
| 86 | ( 1 ) L_LOG=1 ;; |
---|
| 87 | ( 2 ) L_LOG=2 ;; |
---|
| 88 | ( 3 ) L_LOG=3 ;; |
---|
| 89 | esac |
---|
| 90 | done |
---|
| 91 | shift $(( ${OPTIND} - 1 )) |
---|
| 92 | |
---|
| 93 | if [[ ${L_LOG} -le ${LOG_LEV} ]] |
---|
| 94 | then |
---|
| 95 | MESSAGE=${*} |
---|
| 96 | P_LINE="$(date) - ${MESSAGE}" |
---|
| 97 | |
---|
| 98 | echo ${P_LINE} |
---|
| 99 | echo ${P_LINE} >> ${L_DEM_LOG} |
---|
| 100 | fi |
---|
| 101 | return |
---|
| 102 | } |
---|