获取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