欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2022-05-14 19:42:09
1.应用背景: 无人监测的设备,常需要设置应用程序开机启动,程序启动前需要保证调用的设备先启动,运行环境先启动。 2.test.sh部分源码 2.1 grep 指令: 用于匹配文本字符 用法1:grep 字符串 文件路径; 用于匹配查找文件中的相同字符串。 用法2:grep -v 字符串;翻转查找, ......

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:

      参考2:

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"

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

     第三步:reboot

4  总结

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

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