[shell] uso del comando eval: simplifique la estructura del shell para encapsular múltiples comandos y ejecutarlos

1. Concepto

eval es un comando integrado de shell, que puede expandir la cadena contenida en una variable en un script de shell y ejecutarlo.

Cuando generamos un comando de shell concatenando cadenas, podemos usar eval para ejecutarlo.

 

2. Gramática

eval [参数]

参数不限数目,彼此之间用分号分开。;号之间可以写多个命令。

ejecutar lógica

Cuando agregamos eval antes de la línea de comando, el shell escanea el comando dos veces antes de ejecutarlo.
El comando eval primero escaneará la línea de comando para todas las sustituciones (comando) antes de ejecutar el comando.

Ejemplo:

$ val1='cat a.txt'
$ echo $val1
cat a.txt
$ eval $val1
a b c
a b c

De lo anterior podemos ver que cuando asignamos directamente cat a.txt a la variable val1, ejecutamos echo $val1, y la salida solo será cat a.txt como una cadena.

Después de usar el comando eval, generará lo que queremos. Debido a que la sustitución de variables se realizó en el primer escaneo, el segundo escaneo ejecuta el comando del archivo cat dentro de la cadena contenida en esa variable.

 

3. Ejecuta múltiples comandos

# 用字符串封装了多个执行命令,其中命令中还有对变量的引用
SERVER_REMOTE_START_CMD="source /etc/profile;source ~/.bash_profile;cd ${SERVER_BIN}; dos2unix ./* > /dev/null 2>&1; dos2unix ../conf/* > /dev/null 2>&1; sh start-${SERVER_NAME}.sh > /dev/null 2>&1" 

。。。
if [ $flag == "0" ];then
   eval $SERVER_LOCAL_START_CMD
else
   ssh -p $SSH_PORT $SERVER_IP $SERVER_REMOTE_START_CMD
fi   

La importancia de la encapsulación aquí es simplificar la visualización de if else.

Guess you like

Origin blog.csdn.net/hiliang521/article/details/131445848