Linux

循環使用者問題

  • September 6, 2022

我正在努力解決使用者 ID 的循環問題,我想列出 /etc/passwd 中 ID 大於 999 的所有使用者,它無法辨識我的 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 但它也不起作用

您需要括號周圍的空格:

這個:

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 

你提到你沒有awk。很遺憾,因為這將是一個高效的解決方案:

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

如果你有grep並且cut你可以通過至少有四個字元的 uid 來提取你的使用者:

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

或者sed

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

如果你發現你確實需要使用 shell 循環,這裡是你的固定程式碼的一個版本。主要錯誤是忘記了這[是一個命令,因此標記器需要空格。我也整理了一下read

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

將您的程式碼放入https://shellcheck.net/會對您有所幫助。我下次會推薦它。

引用自:https://unix.stackexchange.com/questions/716366