LINUX.ORG.RU

BASH не могу передать переменную в awk


0

1
#!/bin/bash

#Файл групп
GFILE=/etc/group

#Искомый пользователь
USER1=user1
USER2=user2

if [ ! -f $GFILE ]; then 
echo "ERR: Файл /etc/group не обнаружен"
	else
	echo "Файл найден"
	GUSER1=$(awk '{FS = ":"} /$USER1/ {print $1}' /etc/group)
	GUSER2=$(awk '{FS = ":"} /$USER2/ {print $1}' /etc/group)
fi

Юзеры не попадают в скрипт через переменные USER1, USER2 приходится указывать явно, я так понимаю что это из-за ", можно как то обойти?

★★★★★

а если писать ${USER1} ?

anonymous
()

> GUSER1=$(awk '{FS = ":«} /$USER1/ {print $1}' /etc/group)

Наверно, GUSER1=$(awk »{FS = \":\«} /$USER1/ {print \$1}» /etc/group)

x3al ★★★★★
()
Ответ на: комментарий от x3al

неужели для вас это лучше чем awk -v ...

sdio ★★★★★
()
Ответ на: комментарий от YAR
@madoka~>var='1 1'; echo | awk '{print '$var'*'$var'}'
111

У тебя не переменные в кавычках, а просто закрытие кавычек перед ними. Это чревато странными последствиями, впрочем, в задачах вроде той, что в ОП, не всплывёт. Но это не значит, что к такому стилю стоит привыкать.

x3al ★★★★★
()
Ответ на: комментарий от x3al

У тебя неправильный awk. В моем строки перемножить нельзя:

rain@acnote:~$ var='1 1'; echo | awk '{print '$var'*'$var'}'
awk: cmd. line:1: {print 1
awk: cmd. line:1: ^ unexpected newline or end of string

YAR ★★★★★
()
Ответ на: комментарий от YAR

У меня неправильный zsh вместо баша в несовместимом режиме. Но сути это не меняет, грабли впереди ждут. Лучше двойные кавычки и эскейпинг в общем случае и -v в случае awk.

x3al ★★★★★
()

Проверку наличия файла можно сократить:

[ ! -f $GFILE ] && { echo «ERR: Файл /etc/group не обнаружен» ; exit 1 ; }

echo «Файл найден»
GUSER1=$(awk '{FS = ":«} /$USER1/ {print $1}' /etc/group)
GUSER2=$(awk '{FS = »:«} /$USER2/ {print $1}' /etc/group)

Othniel
()
Ответ на: комментарий от aol

Плюсую.

$ id -gn root > /dev/null 2>&1 ; echo $?
0
$ id -gn nouser > /dev/null 2>&1 ; echo $?
1
Othniel
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.