Usando el script bash para actualizar el número en un file de script php

Uso el siguiente script bash / shell para semiautomatizar la rutina git add / commit / push en mi proyecto:

git_push.sh

#!/bin/bash # Mini Config RColor='\e[0m' Red='\e[0;31m'; Green='\e[0;32m'; Yellow='\e[0;33m' # Change To Working Directory clear; cd $HOME/public_html/iwms_reboot; # Get Git Commit Notes echo -en "\r\n${Green}Enter commit notes: ${Yellow}"; read notes; if [[ -z "$notes" ]] then echo -e "\r\n${Red}ERROR: You have not entenetworking any git commit notes.${RColor}\r\n"; exit 0; fi echo -e "${RColor}"; # Git Add, Commit & Push git add .; git commit -m "${notes}"; echo -e "\r\n"; git push; echo -e "\r\n"; 

Esto funciona perfectamente bien.

Quiero dar un paso más. En mi proyecto, hay un único file llamado version.php con las siguientes líneas de código:

 <?php // Script Version $script_version = 'v1.0.5'; ?> 

Mi pregunta es, ¿es posible usar scripts de bash / shell para cargar el contenido de este file y encontrar el número después del 2nd período ( . ) E incrementarlo en uno?

es decir, v1.0.5 se convertirá en v1.0.6

De esta manera, puedo ejecutar esta function de actualización de número de versión antes de mi rutina (git add / commit / push) para implementar una funcionalidad automática de actualización de número de minor version en mi proyecto. Es decir, el número de versión del script sube automáticamente cada vez que lo hago.

Si quieres una solución de 'pure-bash', aquí está …

 #!/bin/bash new_version='' increment_version_number () { declare -a part=( ${1//\./ } ) declare new declare -i carry=1 for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 )); do len=${#part[CNTR]} new=$((part[CNTR]+carry)) [ ${#new} -gt $len ] && carry=1 || carry=0 [ $CNTR -gt 0 ] && part[CNTR]=${new: -len} || part[CNTR]=${new} done new="${part[*]}" new_version="${new// /.}"; } version=$(sed version.php -e "s/\$script_version = 'v//" | sed -e "s/';$//") increment_version_number $version echo $new_version; 

ACTUALIZACIÓN: Código para numbers de versión de dos dígitos (como se solicita en el comentario):

 #!/bin/bash new_version='' increment_version_number () { declare -a part=( ${1//\./ } ) declare new declare -i carry=1 for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 )); do len=${#part[CNTR]} new=$((part[CNTR]+carry)) [ ${#new} -gt $(($len+1)) ] && carry=1 || carry=0 part[CNTR]=${new} done new="${part[*]}" new_version="${new// /.}"; } version=$(grep "\$script_version" version.php | sed -e "s/\$script_version = 'v//" | sed -e "s/';$//") increment_version_number $version echo $new_version; 

(advertencia: código no probado por completo …)

Gracias a fnetworkingtantini y usando la respuesta de ¿Cómo incrementar el número de versión en un script de shell? , He encontrado la siguiente solución a mi problema original.

Primero creé un file llamado version.data y puse el text 1.0.5 en él.

Luego actualicé mi script PHP así:

 <?php // Script Version $script_version = 'v'. trim(file_get_contents(app_path() .'/version.data')); ?> 

Luego, creé el siguiente script de gawk llamado version_updater.sh (al lado de mi script git_push.sh ):

 #!/usr/bin/gawk -f BEGIN { printf("%s", inc(ARGV[1])) } function inc(s, a, len1, len2, len3, head, tail) { split(s, a, ".") len1 = length(a) if(len1==0) return -1 else if(len1==1) return s+1 len2 = length(a[len1]) len3 = length(a[len1]+1) head = join(a, 1, len1-1) tail = sprintf("%0*d", len2, (a[len1]+1)%(10^len2)) if(len2==len3) return head "." tail else return inc(head) "." tail } function join(a, x, y, s) { for(i=x; i<y; i++) s = sa[i] "." return sa[y] } 

Luego, actualicé mi script git_push.sh así:

 #!/bin/bash # Mini Config RColor='\e[0m' Red='\e[0;31m'; Green='\e[0;32m'; Yellow='\e[0;33m'; Source=$HOME/public_html/iwms_reboot; # Increment Script Version CurrentVersion=`cat "$Source/app/version.data"`; NewVersion=`./version_updater.sh $CurrentVersion`; # Change To Working Directory clear; cd $Source; # Get Git Commit Notes echo -en "\r\n${Green}Enter commit notes: ${Yellow}"; read notes; if [[ -z "$notes" ]] then echo -e "\r\n${Red}ERROR: You have not entenetworking any git commit notes.${RColor}\r\n"; exit 0; fi echo -e "${RColor}"; # Update Script Version echo $NewVersion > $Source/app/version.data; # Git Add, Commit & Push git add .; git commit -m "${notes}"; echo -e "\r\n"; git push; echo -e "\r\n"; 

… y eso es todo, funciona.

cuando se ejecuta el script, lee la versión actual, lo pasa al version_updater.sh para incrementarlo programáticamente y poner el valor de retorno en una variable.

Justo antes de comprometerme, actualizo mi file version.data con el número de versión actualizado. Ahora cuando me comprometo, me comprometo con el nuevo número de versión.