プロが教える店舗&オフィスのセキュリティ対策術

はじめまして現在Perlでスクリプトを作成しています。
やりたいことは
・ユーザがコマンドラインより文字(ユーザID)を入力
・その文字列が#getent passwdの結果にあるか無いかで処理を分ける
です。

#getent passwd | grep hogehogeの結果は下記のとおりです。
hogehoge:x:1210:104:staff:/home/data/staff/hogehoge:/bin/bash
これより先頭の[hogehoge]とユーザが入力したhogehogeが完全一致すれば問題ありません。
正規表現を調べましたが文字列での一致はあるのですが引数での文字列が調べることが出来ませんでした。
よろしくお願いします。
print "Enter User ID\n";
$id = <STDIN>;
chomp($id);
$cmd =`getent passwd | grep $id`;
system($cmd);
if ($cmd == ~ /^$id/) {
print "There is not ID\n";

} else {
print "Your ID is there\n";
}

A 回答 (1件)

だから, 単に「できない」とだけ書くんじゃなくてどのように「できない」のかをきちんと書こうよ. 「どのような値を入力したのか」「その入力に対してどのような結果を期待したのか」「実際に得られた結果はどうだったのか」くらいは書けるよね. あと, 「正規表現を調べましたが文字列での一致はあるのですが引数での文字列が調べることが出来ませんでした」の意味も分からん. 「引数での文字列」って何? 「引数」とどこが関係するの?


ま, とりあえず「正規表現がど~のこ~の」以前におかしいんだけど. 特に
$cmd =`getent passwd | grep $id`;
system($cmd);
if ($cmd == ~ /^$id/) {
のあたりには「あなたは何がしたいのですか」的なものを感じる. 後の流れによるんだけど
sub find_user {
my ($id) = @_;
open PASSWD, '-|', qw(getent passwd);
while (<PASSWD>) {
chomp;
return $_ if /^$id:/;
}
return '';
}
ってサブルーチンを作った方が喜ばれるんじゃないかなぁ.
    • good
    • 0
この回答へのお礼

ありがとうございました。サブルーチンを作って対応しました。
まだperlをはじめて1週間の初心者で質問の方法も分からず失礼しました。

お礼日時:2009/10/14 20:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!