有时在一些linux环境中,没有权限把shell脚本文件放上去执行,但又需要通过一大串shell命令完成一些功能,这时,把shell脚本中的多行命令转成单行命令, 复制粘贴到这些linux环境上执行,可能是一种比较好的解决方法。
将多行命令转变成单行时,需要使用分隔符隔开这些命令,不同分隔符使用不同的方式来执行多个命令。每种方式都有不同的行为和用途。
1. 用 `;` 隔开命令:
使用分号 `;` 来隔开多个命令,这将导致所有命令按顺序执行,无论前一个命令是否成功。
2. 用 `&&` 隔开命令:
使用逻辑与运算符 `&&` 来隔开多个命令,这将只有在前一个命令成功(返回状态码为0)时才执行下一个命令。
3. 用 `&` 隔开命令:
使用 ampersand `&` 来隔开多个命令,这将使每个命令在后台独立运行,不会等待前一个命令完成。
下面举例说明:
ips=('127.0.0.1' '127.0.0.2')
tranCodes=('1234' '4321' '1212')
for tranCode in ${tranCodes[@]}
do
for ip in ${ips[@]}
do
cmd="curl -s ${ip}:8080/search/${tranCode}"
ret=`${cmd}`
echo "${cmd}=|${ret}|"
if [ -z "${ret}" ]
then
echo "err"
else
echo "ok"
fi
done
done
以上命令需要以 `;` 作为分隔符,转换后为:
ips=('127.0.0.1' '127.0.0.2'); tranCodes=('1234' '4321' '1212'); for tranCode in ${tranCodes[@]}; do for ip in ${ips[@]}; do cmd="curl -s ${ip}:8080/search/${tranCode}"; ret=`${cmd}`; echo "${cmd}=|${ret}|"; if [ -z "${ret}" ]; then echo "err"; else echo "ok"; fi; done; done;
从上面的单行命令可以看出来,do、then、else后不能跟 `;` 分隔符,其它都要跟 `;` 分隔符。