Я выполняю задание, которое запрашивает пользователя в файле, используя файл passwd
в /etc
.Сравнение строк и операторы if
Я смог это сделать, но когда он не может найти конкретного пользователя, он не отвечает с помощью команды печати, которую я использовал.
Вот мой код:
#!/usr/bin/perl
$file = '/etc/passwd.bak'
open (FILE, $file) or die "Error in reading file. Program will close";
while (<FILE>) {
chomp;
@field = split (':', $_);
if ($ARGV[0] eq $field[0]) {
print "User ID: $field[2]\n" ;
print "Home Directory: $field[5]\n";
}
elsif (@ARGV[0] ~= $field[0] {
print "User: $ARGV[0] does not exist.\n"
}
elsif ((@ARGV > 1 || @ARGV == 0)) {
print "Please enter one argument only.\n";
exit 0;
}
}
Я попытался замены !=
для ne
, но когда я делаю, что это говорит, что каждый аргумент не найден даже тогда, когда я знаю, что есть.
Я попытался посмотреть в своей книге и исследовать его в Интернете без везения.
'@ARGV [0]' не будет работать, потому что 'ARGV [0]' является скаляром, а не массив. Вероятно, вы использовали '$ ARGV [0]', как вы использовали в первой проверке. Кроме того, после '$ field [0]' вам кажется, что отсутствует близкий парик. Подумайте о добавлении 'use warnings;' в начало вашего скрипта. –
Я попробую это, спасибо – user4839691
Вы ясно, что 'while () {...}' будет выполнять блок один раз для каждой строки в файле? –
Borodin