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: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 查找串時,引入的欄位。