我相信这是我一个简单的语法问题,但我无法找到另一个类似于我正在尝试做的事情的例子。我有一个变量接收特定的磁盘位置,我需要在 hdparm/grep 命令中使用该位置来提取最大 LBA
targetDrive=$1 #/dev/sdb
maxLBA=$(hdparm -I /dev/sdb |grep LBA48 |grep -P -o '(?<=:s)[^s]*') #this works perfect
maxLBA=$(hdparm -I $1 |grep LBA48 |grep -P -o '(?<=:s)[^s]*') #this fails
我也试过
maxLBA=$(hdparm -I 1 |grep LBA48 |grep -P -o '(?<=:s)[^s]*')
maxLBA=$(hdparm -I "$1" |grep LBA48 |grep -P -o '(?<=:s)[^s]*')
感谢您的帮助
所以我认为这是你问题的解决方案。我做了基本上和你一样的事情,但改变了我把结果相互引导的方式。
- 使用正则表达式查找包含 LBA48 的行的 grep
- 剪切以在生成的字符串除以列 ":" 时检索第二个字段
- 然后从结果中修剪所有租赁空间
这是我生成的 bash 脚本。
#!/bin/bash
target_drive=$1
max_lba=$(sudo hdparm -I "$target_drive" | grep -P -o ".+LBA48.+:.+(d+)" | cut -d: -f2 | tr -d ' ')
echo "Drive: $target_drive MAX LBA48: $max_lba"