ユーザー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
構造の終わりも同じですfi
。di
スクリプトは次のようにする必要があります。
cat /etc/passwd | while IFS=: read name password uid gid geos home; do if [ "$uid" -gt 999 ]; then echo $name ;fi ;done