服务器编译脚本 build.sh

脚本内容如下:

#!/bin/bash -e
scp_dir=/media/lyn/win_data/lyn_workdata/working/robot-ctl
download_data=/home/lyn/Documents/work-data/download_data
build_dir=/home/lyn/projects/yocto/yocto-build/tmp/work/aarch64-poky-linux/robotctl/git-r0/git/
image_dir=/home/lyn/projects/yocto/yocto-build/tmp/work/aarch64-poky-linux/robotctl/git-r0/image/robot-ctl/
remote_exec_file_dir=/home/lyn/Documents/work-data/download_data/scp_exec.sh
all_build=No
wifi_src=No
only_scp_robot=No
strip_mode=No
ip_wireless_dhcp=170.160.111.45
ip_ethernet_dhcp=170.160.111.147
local_ip=${ip_wireless_dhcp}
host_name=lyn
date
echo -e "\033[0;31m Loading options.\033[0m"
# Load all the options.
if [ $# -eq 0 ];then
echo -e "\033[33;5m no argument \033[0m"
fi
for arg in "${@}"
do
if [[ -n "${arg}" ]] && [[ "${arg}" == "wifi" ]] ; then
wifi_src="Yes"
local_ip=${ip_ethernet_dhcp}
echo -e "local connect robot wifi \n --${wifi_src}\n --ip:${local_ip}."
fi
if [[ -n "${arg}" ]] && [[ "${arg}" == "scp" ]] ; then
only_scp_robot="Yes"
local_ip=${ip_ethernet_dhcp}
echo -e "scp robot local connect robot wifi \n --scp:${only_scp_robot} -
-${wifi_src}\n --ip:${local_ip}."
fi
if [[ -n "${arg}" ]] && [[ "${arg}" == "all_build" ]] ; then
all_build="Yes"
echo -e "all bulid"
fi
if [[ -n "${arg}" ]] && [[ "${arg}" == "ip" ]] ; then
echo -e "\033[32m ip:=\033[0m"
read ip_addr
local_ip=${ip_addr}
wifi_src="Yes"
echo -e "scp robot local ip insert \n --scp:${only_scp_robot} -
-${wifi_src}\n --ip:${local_ip}."
fi
if [[ -n "${arg}" ]] && [[ "${arg:0:3}" == "ip=" ]] ; then
echo -e "\033[32m ip put:=\033[0m" ${arg#*=}
local_ip=${arg#*=}
wifi_src="Yes"
echo -e "scp robot local ip insert \n --scp:${only_scp_robot} -
-${wifi_src}\n --ip:${local_ip}."
fi
if [[ -n "${arg}" ]] && [[ "${arg}" == "debug" ]] ; then
echo -e "\033[32m need \033[0m" ${arg}
strip_mode="Yes"
echo -e "scp robot local ip insert \n --scp:${only_scp_robot} -
-${wifi_src}\n --ip:${local_ip}."
fi
done
if [ "${only_scp_robot}" == "No" ];then
if [ ! "${wifi_src}" == "Yes" ] ; then
echo -e "local don't connect robot wifi \n --${wifi_src}\n --ip:${local_ip}."
fi
if [ -d "${build_dir}" ]; then
cd ${build_dir}
scp -rp lyn@{local_ip}:${scp_dir}/src \
lyn@{local_ip}:${scp_dir}/include \
lyn@{local_ip}:${scp_dir}/CMakeLists.txt .
//ssh ${host_name}@${local_ip} "${remote_scp_code_dir}"
#git pull
if [ "${all_build}" == "Yes" ] ; then
./../temp/run.do_generate_toolchain_file
./../temp/run.do_configure
fi
./../temp/run.do_compile
./../temp/run.do_install
#cd /home/lyn/
if [ "${strip_mode}" == "No" ]; then
#./strip_x1000.sh
cd ${image_dir}
aarch64-linux-gnu-strip pp
fi
else
echo -e "\033[0;31m dir is not exist.\033[0m"
fi
fi
scp ${image_dir}/exec ${host_name}@${local_ip}:${download_data}
if [[ "${wifi_src}" == "Yes" ]] || [[ "${only_scp_robot}" ]] ; then
ssh ${host_name}@${local_ip} "${remote_exec_file_dir}"
else
echo -e "no robot wifi\n"
fi

服务器执行的脚本内容比较长,从执行的流程来说,在这个脚本中,大致为初始化读取脚本执行传入的 参数,通过参数配置不同的变量匹配不同机器状态,紧接着,拷贝本地的文件到服务器编译,服务器编 译完成之后拷贝可执行文件到本地,再调用本地的脚本把可执行文件拷贝到机器对应的目录。

这个脚本有些使用技术和第一个脚本有重合,此处仅说没有讲到的部分。

首先第一个使用的就是 { $# } 和 {$@ }

下面是从菜鸟教程拷贝的shell传参的特殊字符介绍

特殊字符介绍

参数

处理

说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。 如"用「」括起来的情况、以1 n"的形式输 出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与相同,但是使用时加引号,并在引号中返回每个参数。如@"用「"」括起来的情况、 以"2" … "$n" 的形式输出所有参数。
$-显示Shell使用的当前选项
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

我在其中使用了$#用来辅助提醒输入的参数数量,防止出错;

if [ $# -eq 0 ];then

   echo -e "\033[33;5m no argument \033[0m"

fi

然后使用$@把传入的参数一个个解析出了来,进行变量的配置。

for arg in "${@}"

do

     if [[ -n "${arg}" ]] && [[ "${arg}" == "wifi" ]] ; then

         wifi_src="Yes"

         local_ip=${ip_ethernet_dhcp}

  echo -e "local connect robot wifi \n --${wifi_src}\n --ip:${local_ip}."

      fi

  ...

done

其次使用了字符串截取的操作

if [[ -n "${arg}" ]] && [[ "${arg:0:3}" == "ip=" ]] ; then

    echo -e "\033[32m ip put:=\033[0m" ${arg#*=}

    local_ip=${arg#*=}

  wifi_src="Yes"

       echo -e "scp robot local ip insert \n --scp:${only_scp_robot}

- -${wifi_src}\n --ip:${local_ip}."

fi

${arg:0:3} 意思为从左边第0个字符开始,字符的个数为3个

${arg#*=} 意思为 # 号截取,删除 '='左边字符,保留右边字符。

至于为什么这么使用,以及其他使用的介绍,这里我摘录其他博主的文章给大家做一个简单的分享 摘录自:《shell脚本字符串截取的8种方法》

假设有变量 var=http://www.aaa.com/123.htm.

1. # 号截取,删除左边字符,保留右边字符。

echo ${var#*//}

##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符 即删除 http://www.aaa.com/ 结果是 123.htm

3. %号截取,删除右边字符,保留左边字符

echo ${var%%/*}

%/* 表示从右边开始,删除第一个 / 号及右边的字符

结果是:http://www.aaa.com

4. %% 号截取,删除右边字符,保留左边字符

echo ${var%%/*}

%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符 结果是:http:

5. 从左边第几个字符开始,及字符的个数

echo ${var:0:5}

其中的 0 表示左边第一个字符开始,5 表示字符的总个数。 结果是:http:

6. 从左边第几个字符开始,一直到结束。

echo ${var:7}

其中的 7 表示左边第8个字符开始,一直到结束。 结果是 :www.aaa.com/123.htm

7. 从右边第几个字符开始,及字符的个数

echo ${var:0-7:3}

其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。 结果是:123

8. 从右边第几个字符开始,一直到结束。

echo ${var:0-7}

表示从右边第七个字符开始,一直到结束。 结果是:123.htm

注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

此外我们也可以使用awk、cut进行截取,这里就不一一列举了

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向日葵般灿烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值