【shell/ros】shell脚本获取文件夹下所有.bag并自动播包

本文介绍了如何使用shell脚本遍历文件夹中的bag文件,并通过`rosbagplay`播放指定话题的包。脚本使用`dirname`获取目录名,检查文件类型,并实现无限循环播放。
摘要由CSDN通过智能技术生成

 

序言

  • 通过shell脚本遍历文件夹下所有bag并自动播包

1. 脚本

  • 运行

    touch xxx.sh		# 新建脚本
    vim xxx.sh			# 编辑脚本
    chmod 777 xxx.sh	# 赋予运行权限
    ./xxx.sh			# 运行脚本
    
  • 脚本内容

    #! /bin/bash
    
    run_bags() {
        #echo $1
        for file in `ls $1`
        do
            #if [ -f "$file" ]; then
            if [ "${file#*.}"x = "bag"x ]; then
                rosbag play "$file" --topic /your_topic_name
            fi
        done
    }
    
    path=$(cd $(dirname $0);pwd)
    run_bags $path
    
  • 循环运行的脚本内容

    #! /bin/bash
    
    run_bags() {
    	files=$(ls ./*.bag)
    	# files='ls ./*.bag'	# $(ls ./*.bag) 或 'ls ./*.bag'都可以
        for file in $files		# 或者直接写成 for file in 'ls ./*.bag'
        do
        	rosbag play "$file" --topic /your_topic_name
        done
    }
    
    path=$(cd $(dirname $0);pwd)
    while true
    do
    	run_bags $path
    done
    

2. 说明

  • dirname $0

    • dirname用于获取目录名,如获取当前脚本目录

      script_dir=$(cd $(dirname $0);pwd)
      
      dirname /usr/bin/  	# 输出 /usr
      dirname xxx.sh 		# 输出 .
      
    • $0表示shell本身的文件名

      注意=赋值前后没有空格

  • `ls $1`

    • ``是英文输入法下的``,不是单引号’',表示执行系统命令
    • $1表示shell脚本的第一个参数,这里指run_bags函数的第一个参数,即脚本所在路径
  • test命令

    • 用于检查某个条件是否成立,也可以简写为[],用法为[ expression ],注意前后都有空格
    • 可以用来进行 (1) 数值比较; (2) 字符串比较; (3) 文件比较
    • 具体用法参考 shell中test命令
  • "${file#*.}"x = "bag"x

    • 用于获取文件后缀判断文件类型,如.txt .bag等
    • #是贪婪操作符,从左到右匹配,匹配到最右边的.号,移除包含.号的左边内容
    • 加x是为了防止字符串为空时报错
  • 报错 binary operator expected

    • 加上双引号解决,如 if [ -f “$file” ]
  • ls ./*.bag

    • ./是当前目录,可以修改为任意bag所在目录
    • *.bag匹配 any_name.bag

【参考文章】

shell遍历目录下所有文件
shell获取脚本当前路径
binary operator expected报错解决
shell获取文件前缀、后缀
shell获取文件后缀判断文件类型
ls获取所有目录/文件

created by shuaixio, 2023.08.08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值