2010-03-01 3 views
4

Я пытаюсь включить этотПараметры командной строки в Shell Script?

du -s *|awk '{ if ($1 > 3000) print }' 

в сценарий оболочки, но я хочу параметризировать 3000. Однако, поскольку $1 уже используется, я не знаю, что делать. Это был полный провал:

size=$1 
du -s *|awk '{ if ($1 > $size) print }' 

Как я могу передать параметр вместо 3000 в первом сценарии выше?

+0

'{если ($ 1> $ размер) печать}' эквивалентно ' $ 1> size' – ghostdog74

+0

@ ghostdog74, ну это 'size = $ 1; du -s * | awk '{$ 1> size}' не работает ... не уверен, что ваш комментарий означает –

+0

i означает в awk, '{if ($ 1> $ size) print}' такое же, как '$ 1 > size'. см. мой ответ для более четкого изображения. – ghostdog74

ответ

3

Одинарные кавычки препятствуют расширению, так:

du -s *|awk '{ if ($1 > '"$1"') print }' 
+0

Это отличный ответ. не могли бы вы указать, почему это лучше/хуже/так же, как 'du -s * | awk '{if ($ 1>' $ 1 ') print}''? –

+0

Если первый аргумент содержит пробел (он не должен *, но я предпочитаю не надеяться, что все будет правильно), то опускание двойных кавычек приведет к тому, что awk не обязательно будет работать по желанию. –

3
size=$1 
du -s *|awk '{ if ($1 > '$size') print }' 
+0

это круто, спасибо! Также работает, конечно, с $ 1. –

+0

Будьте осторожны, поскольку передача параметра с пробелом в нем приведет к сбою. Это, конечно, может быть желательным. –

+0

Но используя свой ответ, вы также можете просто исправить размер $ и использовать $ 1, где вы использовали $ size. Что-то не так с этим вариантом? –

4

при прохождении переменных оболочки AWK, попробуйте использовать -v вариант AWK как можно больше. Это будет "чище", чем иметь кавычки вокруг

size="$1" 
du -s *| awk -v size="$size" '$1>size' 
+0

Кавычки размером size = "$ 1" не нужны. Для простых присваиваний переменных (FOO = $ BAR) не нужны кавычки. – Idelic

+0

моя привычка иногда. никакого вреда не нанести его. – ghostdog74

1

Вы можете установить awk переменные в своей командной строке:

du -s * | awk '{ if ($1 > threshold) print }' threshold=$1 
+0

Только исключение с использованием этого метода заключается в том, что 'threshold' не будет иметь значения в блоке BEGIN {}. – ghostdog74

+0

интересный, классный способ сделать это. –

+0

@ ghostdog74 Что вы пропустите без блока BEGIN {}? –

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