• Linux Shell 脚本学习第一天: 使用grep 命令,lsusb, ps -ef, 实现树莓派(Debian OS)时检测到依赖的USB设备启动后,启动终端自动执行shell脚本


    1.应用背景:

    无人监测的设备,常需要设置应用程序开机启动,程序启动前需要保证调用的设备先启动,运行环境先启动。

    2.test.sh部分源码

    #!/bin/sh
    
    #查看桌面是否启动
     while  true; do
        COUNT=$(ps -ef |grep lxpanel |grep -v "grep" |wc -l)
            if [ $COUNT -gt 0 ]; then
                 break      
            fi
     done
     
    #查看nginx是否启动
     while  true; do
          COUNT=$(ps -ef |grep nginx |grep -v "grep" |wc -l)
          if [ $COUNT -gt 0 ]; then
                  break
                  
              fi
     done
     
    while  true  ; do
        if [ -b /dev/sda1 ]; then
            break
        fi
    done
    #检查串口设备是否启动
    while  true; do
        if [ -c /dev/ttyUSB0 ]; then
            break
        fi
    done
    
    while true; do
        if [ -c  /dev/ttyUSB1 ]; then
            break
        fi
    done
    
    #等待设备号为1e10:4000的USB设备启动
    while true; do
        COUNT=$(lsusb |grep "1e10:4000" |grep -v "grep" |wc -l)
        if [ $COUNT -eq 1 ];then
           break
        fi
    done
    
    #
    #具体代码
    #
    
    wait
    
    #执行脚本后要保持终端不消失
    exec bash
    
    eval "$BASH_POST_RC"   

    2.1 grep 指令: 用于匹配文本字符

          用法1:grep  字符串   文件路径; 用于匹配查找文件中的相同字符串。

          用法2:grep -v 字符串;翻转查找,即输出和 grep 字符串  不匹配的项。

          用法3:grep -e  字符串,grep -e 字符串, 文件;在文本中查找多个字符串,实现and的效果。

          待续...

          参考1:https://blog.csdn.net/lijing742180/article/details/84959963

          参考2:https://www.jianshu.com/p/4ec50fdaf388

    2.2 ps -ef | grep  进程名 | grep -v "grep" | wc  -1

           第一步:ps -ef 列出所有进程及其详细信息,输出为一个超长的文本,可以在脚本中,用echo指令打印内容查看。

           第二步: | grep 进程名称字符串;作用:在ps -ef 指令执行输出的文本中,找出进程名称字符串。

           | grep -v "grep" 这句的意义在于,将第二步所得结果中,去除含有grep字段的项,因执行grep指令,本身会在进程中引入进程名称字段,可终端敲指令后,执行ps -A 或者ps -ef 验证。

           |wc -1 计算总共得到多少条查询结果。

    2.3 lsusb 

         -v    显示所有USB设备的信息,涵盖设备描述符,速度,电流大小,总线号,设备ID,速度,厂商信息等等。

         -d    [厂商ID]:[设备ID]  匹配指定厂商ID和设备ID的信息。

        ...

        lsusb |grep "1e10:4000" |grep -v "grep" |wc -l    解释:lsusb执行后,输出所有USB设备描述文本,grep在文本中寻找厂商ID和设备ID为“1e10:4000”的设备。

         参考: man lsuab

      3 设置树莓派开机进入桌面时调用tesh.sh shell脚本

         第一步: sudo  nano /etc/xdg/lxsession/LXDE-pi/autostart

         第二步:文本最后一行增加:lxterminal -e bash -c "/home/pi/Desktop/test.sh"

         

         第三步:reboot

    4  总结

        知识要点: ps命令,lsusb命令,grep 命令

        核心一句话总结:grep用于配合其他shell命令使用,用于shell指令输出结果查找时,本质是长字符串中字串的查找和匹配,且需去除grep 查找串时,引入的字段。

    
    
  • 相关阅读:
    linux ss 网络状态工具
    如何安装最新版本的memcached
    如何通过XShell传输文件
    mysql主从复制原理
    聊聊IO多路复用之select、poll、epoll详解
    聊聊 Linux 中的五种 IO 模型
    pytorch中使用cuda扩展
    pytorch中调用C进行扩展
    双线性插值
    python中的装饰器
  • 原文地址:https://www.cnblogs.com/coding-for-a-better-world/p/11349515.html
Copyright © 2020-2023  润新知