基于Bash脚本自己开发ROS的一键启动

举报
Hermit_Rabbit 发表于 2022/08/15 13:54:39 2022/08/15
【摘要】 0 前言最近没啥可以写博客的好点子,为此一直咕咕咕了。端午节没啥事,左右苦思冥想,发现网上针对ROS的bash启动脚本几乎还是处于0的状态。为此针对性的给ROS开一个bash脚本的教程是非常有必要的。也希望各位大佬能提点意见,如果后续合适,我会继续根据各位的意见来继续开坑的。 1 bash 脚本简介 1.1 bash 脚本基础介绍首先我们知道常见的bash脚本是基于shell文件的。因为b...

0 前言

最近没啥可以写博客的好点子,为此一直咕咕咕了。端午节没啥事,左右苦思冥想,发现网上针对ROS的bash启动脚本几乎还是处于0的状态。为此针对性的给ROS开一个bash脚本的教程是非常有必要的。也希望各位大佬能提点意见,如果后续合适,我会继续根据各位的意见来继续开坑的。
在这里插入图片描述

1 bash 脚本简介

1.1 bash 脚本基础介绍

首先我们知道常见的bash脚本是基于shell文件的。因为bash是免费的并且很容易使用。所以很多开源作者所提供的脚本都是使用bash。为此我们非常有必要去对该脚本语言结构进行详细阐述

  1. 程序必须以下面的行开始(必须方在文件的第一行)。符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序:

    #!/bin/sh
    

    bash提供一些可选项帮助你调试程序,-x option它在执行时打印命令和参数。它被称为打印调试,跟踪或x跟踪。我们可以通过修改第一行来使用它;-e option它代表“出错”。如果命令以非零退出状态退出,这将导致脚本立即退出。-v option它在读取时打印shell命令/输入行。这些选项可以组合使用,一次可以使用多个选项!

    #!/bin/bash-xe
    #!/bin/bash-ex
    #!/bin/bash-x-e
    #!/bin/bash-e-x
    
  2. 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。bash脚本的注释非常有必要,也为了未来我们去分析我们所写脚本的作用及工作原理。

  3. 脚本执行,我们可以通过两种方式,来运行filename文件:

     chmod +x filename
     ./filename
    
1.2 bash 脚本基础语句介绍
  1. bash脚本也可以对变量赋值,但是注意,等号两边不应有空格。同时bash中的语句结尾不需要分号(";")

    num="hello world"
    NUM=$(num)#该命令执行后的输入结果赋值给一个变量
    
    read -p "Please Enter You Name: " NAME #read 命令接收键盘的输入
    echo "Your Name Is: $NAME"
    
  2. 如果我们需要打印变量a的内容,则可以用echo来实现文本的打印

    #变量分开打印
    num=2
    echo "NUM is:"
    echo $num
    #一行打印
    num=2
    echo "this is the "$num
    echo "this is the ${num}nd"
    
  3. $符号在bash文件中起到非常重要的作用。当我们在执行脚本时有时很想传个参数进去,如:#sh mysh.sh abc那这时候需要用到$符号

    $# #传入脚本的命令行参数个数
    
    $* #所有命令行参数值,在各个参数值之间留有空格
    
    $0 #命令本身(shell文件名)
    
    $1 #第一个命令行参数
    
    $2 #第二个命令行参数
    

    我们可以用以下脚本进行测试

    sh my.sh a b c d e
    

    my.sh

    #!/bin/sh
    echo "number of vars:"$#
    echo "values of vars:"$*
    echo "value of var1:"$1
    echo "value of var2:"$2
    echo "value of var3:"$3
    echo "value of var4:"$4
    echo "value of var4:"$100 #执行时并没有输入100个参数,那取得的值为 NULL
    

    另外还有其他的 $符号指令

    $$
    #Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
    $!
    #Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
    $?
    #最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
    $*
    #所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
    $@
    #所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    #$@ 跟$*类似,但是可以当作数组用
    

…详情请参照古月居

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。