2014-02-20 3 views
1

Я считаю, что это простая проблема синтаксиса с моей стороны, но я не смог найти другой пример, аналогичный тому, что я пытаюсь сделать. У меня есть переменная, принимающая в определенном месте на диске, и мне нужно использовать это место в команде HDPARM/Grep, чтобы вытащить максимальную LBABash - командный вызов перенесен в переменную с другой переменной внутри

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]*') 

Спасибо за help

+0

Греф, похоже, не работает на моей машине. Я не получаю никаких результатов, которые выполняются непосредственно с/dev/sda. Вам просто нужно, чтобы сектора, расположенные за пользовательскими секторами LBA48:? – flazzarini

+0

Вы хотите, чтобы '**' были буквальными? Они не работают для акцента при использовании внутри раздела кода. –

+0

Вы, безусловно, уверены, что '$ 1', на самом деле, именно то, что вы ожидаете от этого? Я бы предложил запустить 'printf 'Первый аргумент:% q \ n'" $ 1 "' –

ответ

0

Так что я думаю, что это решение вашей проблемы. Я сделал в основном то же самое, что и вы, но изменил способ передачи результатов друг другу.

  • Grep с регулярным выражением, чтобы найти строку, содержащую LBA48
  • разрез, чтобы получить второе поле, когда полученная строка делится на колонке «:»
  • затем обрезать все leasding пробелы из результата

Вот мой итоговый сценарий 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" 
+0

Ну, я не использовал все ваши изменения, но вы заставили меня понять мою глупую ошибку. У меня уже был target_drive, но я все еще пытался использовать $ 1 в своей команде. изменение $ 1 до $ target_drive исправлено все –

+0

Oups, did'nt видеть это! Ну, надеюсь, это помогло вам! – flazzarini

+1

@Trivial Если ваш скрипт не имеет в нем 'shift', или вы вызывали этот код в функции,' $ 1 'все равно должен был работать даже после назначения. (Если у вас есть * есть одна из этих вещей ... ну, вы должны были задать свой вопрос, чтобы получить достаточно полный репродуктор, чтобы это было ясно). –

Смежные вопросы