Bash - 命令调用移植到变量内部的另一个变量

时间:2014-02-20 17:24:17

标签: linux bash

我认为这是一个简单的语法问题,但我一直无法找到类似于我想要做的另一个例子。我有一个变量接受特定的磁盘位置,我需要在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]*')

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

所以我认为这是解决问题的方法。我和你做的基本相同,但改变了我将结果传递给彼此的方式。

  • 使用正则表达式grep查找包含LBA48的行
  • 剪切以在结果字符串除以“:”
  • 列时检索第二个字段
  • 然后从结果
  • 修剪所有出租空格

这是我生成的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"