Ваш $i
является переменной оболочки, но он находится внутри кавычки '
, поэтому awk
будет пытаться интерпретировать его вместо оболочки.
Попробуйте это:
username=`awk -F: '{if($3=='$i') print $1}' /root/userpwinfo.txt`
Обратите внимание, что $i
находится между '
метками, что означает, что он находится за пределами блока, который будет интерпретирован awk
, что означает, что он должен интерпретироваться оболочкой.
Также обратите внимание, что еслиу вас есть пустая строка во входном файле, ваша команда awk будет if($3==)
, что недопустимо и приведет к ошибке.
Я хотел бы также прокомментировать, что awk
должен иметь фильтри исполнительный блок.Вам не нужно писать if
внутри блока, если вы не хотите что-то необычное.Это значит, что ваша команда была бы более уместно записана как:
username=`awk -F: '($3=='$i'){print $1}' /root/userpwinfo.txt`
Обратите внимание, что даже это не очень хорошее решение, но вам уже есть над чем подумать только с этими изменениями.Когда вы будете более знакомы с awk
или станете более профессиональным, вернитесь и проверьте комментарии.;)