【shell】eval命令用法:简化shell结构 封装多个命令然后执行

1. 概念

eval 是 shell 内置命令,它可以将一个变量中包含的字符串扩展成 shell 脚本并执行。

当我们通过字符串拼接的方式生成 shell 命令时,可以用 eval 来执行它。

2. 语法

eval [参数]

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

执行逻辑

当我们在命令行前加上eval时,shell就会在执行命令之前扫描它两次。
eval命令将 首先会先扫描命令行进行所有(命令)的置换,然后再执行该命令。

举例:

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

从上面我们可以看到,当我们把cat a.txt直接赋予val1变量后,我们执行echo $val1,输出只会是将cat a.txt当做字符串。

用eval命令后,就会输出我们想要的内容。因为在第一次扫描中进行了变量置换,第二次扫描就执行了该变量所包含的字符串里面的cat file 命令。

3.执行多个命令

# 用字符串封装了多个执行命令,其中命令中还有对变量的引用
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   

这里封装的意义在于简化if else的展示。

猜你喜欢

转载自blog.csdn.net/hiliang521/article/details/131445848
今日推荐