Linux
循環使用者問題
我正在努力解決使用者 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/會對您有所幫助。我下次會推薦它。