shell脚本记录开机时的PIDVID

获取PIDVID

可以使用 shell 脚本结合一些命令行工具来获取 USB 设备的 PID(Product ID)和 VID(Vendor ID),并将其以及操作时间保存到一个文本文件中。下面是一个示例脚本:

#!/bin/bash

# 获取 USB 设备信息
usb_info=$(lsusb)

# 提取 PID 和 VID
pid_vid=$(echo "$usb_info" | grep -oP 'ID \K\S+' | tr '\n' ' ')

# 获取当前时间
timestamp=$(date +"%Y-%m-%d %H:%M:%S")

# 将信息保存到文本文件
echo "PID VID: $pid_vid" >> usb_info.txt
echo "操作时间: $timestamp" >> usb_info.txt

echo "USB 设备信息已保存到 usb_info.txt 文件中!"

确保你已经安装了 lsusb 命令行工具,它通常随着常见 Linux 发行版一起安装。

将上述代码保存为一个脚本文件,例如 usb_info.sh,然后运行以下命令给予脚本执行权限:

chmod +x usb_info.sh

执行完毕后,USB 设备的 PID 和 VID 以及操作时间将会保存在 usb_info.txt 文件中。每次运行脚本时,新的信息将被追加到文件末尾。

请注意,这只能获取当前已连接的 USB 设备的信息。如果你需要监视 USB 设备的插入和拔出事件,并自动记录信息,你可能需要使用额外的工具或编写更复杂的脚本来实现。

下面是一个可以在 Shell 中重复执行重启并检查 USB 设备的示例脚本。该脚本将执行 100 次重启,并在每次重启后使用 sudo 执行 lsusb 命令来查看 USB 设备是否包含指定的 PID 和 VID。脚本会将结果和时间记录到一个文本文件中。

#!/bin/bash

# 指定的 PID 和 VID
pid="1234"
vid="5678"

# 重启并检查 USB 设备
for ((i=1; i<=100; i++))
do
  echo "==== 第 $i 次重启 ===="
  echo "$(date +"%Y-%m-%d %H:%M:%S")" >> usb_check.log
  sudo reboot
  
  # 等待系统重启完全
  sleep 60
  
  # 执行 lsusb,并检查结果是否包含指定的 PID 和 VID
  usb_info=$(sudo lsusb)
  if [[ $usb_info == *"$pid:$vid"* ]]; then
    echo "指定的 USB 设备存在"
    echo "指定的 USB 设备存在" >> usb_check.log
  else
    echo "指定的 USB 设备不存在"
    echo "指定的 USB 设备不存在" >> usb_check.log
  fi
done

echo "检查已完成,结果已保存到 usb_check.log 文件中"

自动重启脚本

#!/bin/bash

file_path="/path/to/count.txt"  # 替换为你的文本文件路径

# 检查文件是否存在
if [ ! -f "$file_path" ]; then
  echo "文件 $file_path 不存在"
  exit 1
fi

# 读取开机次数
count=$(cat "$file_path")

# 减少次数并写回文件
count=$((count-1))
echo "$count" > "$file_path"

echo "开机次数减1,剩余 $count 次"
echo 123 | sudo -S python run.py

shell获取指定条件内容

#!/bin/bash

# 获取范围内行号和最后一个关键字
get_range_and_last_keyword() {
    local file="$1"
    local keyword_a="$2"
    local keyword_b="$3"
    local keyword_c="$4"

    local lina=$(grep -n "$keyword_a" "$file" | cut -d ":" -f 1)
    local linb=$(grep -n "$keyword_b" "$file" | cut -d ":" -f 1)
    
    if [ -n "$lina" ] && [ -n "$linb" ]; then
        local linc=$(awk "NR > $lina && NR < $linb && /$keyword_c/ {print NR}" "$file")

        if [ -n "$linc" ]; then
            local last_keyword=$(grep -o "$keyword_c" "$file" | tail -n 1)
            echo "linc:$linc"
            echo "最后一个关键字:$last_keyword"
        else
            echo "linc未找到"
        fi
    else
        echo "lina或linb未找到"
    fi
}

# 获取指定行号的元素
get_element_in_line() {
    local file="$1"
    local line_number="$2"
    local index="$3"

    local element=$(awk -v line_number="$line_number" 'NR==line_number {split($0, arr); print arr[index]}' "$file")
    echo "$element"
}

# 调用函数进行处理
file="file.txt"
line_number="H"
index="L"
keyword_a="string_a"
keyword_b="string_b"
keyword_c="string_c"

get_range_and_last_keyword "$file" "$keyword_a" "$keyword_b" "$keyword_c"
get_element_in_line "$file" "$line_number" "$index"

是否包含字符串

strA="123456abc"
strB="abc"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
    echo "包含"
else
    echo "不包含"
fi
strA="123456abc"
strB="abc"
if [[ $strA =~ $strB ]]
then
    echo "包含"
else
    echo "不包含"
fi

重复重启

#!/bin/bash

file_path="/testhongpan/rebootnum.txt"  # 替换为你的文本文件路径

# 检查文件是否存在
if [ ! -f "$file_path" ]; then
  echo "文件 $file_path 不存在"
  exit 1
fi

# 读取开机次数
count=$(cat "$file_path")

# 减少次数并写回文件
count=$((count-1))
echo $count > $file_path


echo "开机次数减1,剩余 $count 次"

#echo 123 | sudo -S python run.py

# 判断数字是否大于0
if [ $count -gt 0 ]; then
    # 数字减1
    #new_number=$((number - 1))
    #echo $new_number > num.txt
    echo "重启操作"
    # 执行重启操作,例如:
    # reboot
else
    echo "不需要重启"
fi

查找出现的次数

#!/bin/bash

grep -n "Class=Mass Storage, Driver=usb-storage" /log/usb_lt.log | while read -r line; do
  line_number=$(echo "$line" | cut -d":" -f1)
  content=$(echo "$line" | cut -d":" -f2-)
  last_field=$(echo "$content" | awk '{print $NF}')

  if [[ "$last_field" == "5000M" ]]; then
    echo "Line $line_number: 最后一个字段是 5000M"
  elif [[ "$last_field" == "480M" ]]; then
    echo "Line $line_number: 最后一个字段是 480M"
  else
    echo "Line $line_number: 最后一个字段不是 5000M 或 480M"
  fi
done

count=$(grep -c "Class=Mass Storage, Driver=usb-storage" /log/usb_lt.log)
echo "包含字符串 'Class=Mass Storage, Driver=usb-storage' 的行数为: $count"

count_total=$(grep -c "Class=Mass Storage, Driver=usb-storage" /log/usb_lt.log)
count_5000M=$(grep -c "Class=Mass Storage, Driver=usb-storage.*5000M" /log/usb_lt.log)
count_480M=$(grep -c "Class=Mass Storage, Driver=usb-storage.*480M" /log/usb_lt.log)

echo "出现的总次数: $count_total"
echo "最后一个字段为 5000M 的次数: $count_5000M"
echo "最后一个字段为 480M 的次数: $count_480M"

countVSC=$(grep -c "Class=Vendor Specific Class" /log/usb_lt.log)
echo "VSC出现的次数: $countVSC"

countC=$(grep -c "==== 第" /log/usb_lt.log)
echo "C出现的次数: $countC"

查找所在行数

sed -n -e '/#lsusb/=' te.sh

查看所在行

sed -n '4p' te.sh

查看一共多少行

cat file.txt | wc -l

查看指定ID 进程是否结束

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "请提供一个进程 ID 作为参数。"
    exit 1
fi

PID=$1

while true; do
    if ps -p $PID > /dev/null ; then
        echo "进程 $PID 正在运行。"
    else
        echo "进程 $PID 已经结束。"
        break
    fi
    sleep 1
done

在这个修改后的脚本中,我们首先检查脚本接收的参数个数是否等于 1。如果不等于 1,则输出一条错误提示信息,并使用 exit 1 终止脚本的执行。

然后,我们将第一个参数(即进程 ID)赋值给变量 $PID。接下来,使用一个无限循环 while true,在每次循环中检查指定进程的状态,输出相应的信息,并使用 break 语句跳出循环。

你可以在终端中运行修改后的脚本,并传递指定的进程 ID 作为参数,例如

./check_process.sh 14278
#!/bin/bash

PID=<指定ID>

while true; do
    if ps -p $PID > /dev/null ; then
        echo "进程 $PID 正在运行。"
    else
        echo "进程 $PID 已经结束。"
        break
    fi
    sleep 1
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值