Linux:多行shell命令转成单行命令形式的方法

      有时在一些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;

从上面的单行命令可以看出来,dothenelse后不能跟 `;` 分隔符,其它都要跟 `;` 分隔符。

你可能感兴趣的:(linux,运维,1024程序员节)