循環ユーザーの問題

循環ユーザーの問題

ユーザーIDループが原因で問題が発生しています。 /etc/passwdに999より大きいIDを持つすべてのユーザーを一覧表示しようとしています。 if..fi文を認識しません。最小限のインストールなので、「awk」コマンドがなければ、これは実際のコードです。

cat /etc/passwd | while IFS=: read name pass uid gid geos home; do if [$uid > 999]; then echo $name di done;

-gtも試しましたが、うまくいきませんでした。

答え1

あなたはそうではないと言いましたawk。これは効率的な解決策だったので、恥ずかしいことです。

awk -F: '$3 > 999' /etc/passwd

4文字以上のuidでユーザーを抽出できるgrep場合:cut

grep '^[^:]*:[^:]*:[^:][^:][^:][^:]' /etc/passwd | cut -d: -f1

またはsed:

sed -n 's/^\([^:]*\):[^:]*:[^:][^:][^:][^:].*/\1/p' /etc/passwd

ルーピングに実際にシェルを使用する必要がある場合は、固定コードバージョンがあります。最大の間違いは、これが[命令であるという事実を忘れてしまったことです。したがって、トルクナイザーにはスペースが必要です。私もそれを整理しましたread

while IFS=: read -r name x uid gid geos home shell
do
    [ "$uid" -gt 999 ] && echo "$name"
done

コードを渡すhttps://shellcheck.net/それはあなたを助けます。次にお勧めします。

答え2

角かっこの周りにはスペースが必要です。

これ:

if [$uid > 999];

しなければならない:

if [ "$uid" -gt 999 ];

数字を比較する場合は、を使用して-gt変数を引用することを忘れないでください。

if構造の終わりも同じですfidi

スクリプトは次のようにする必要があります。

cat /etc/passwd | while IFS=: read name password uid gid geos home; do if [ "$uid" -gt 999 ]; then echo $name ;fi ;done 

関連情報