1

/etc/passwd 内の行の UID を復元するスクリプトがありますが、UID が 500 を超えている場合のみです。これは機能しますが... たった 1 つのコマンドですべての行を復元したいのですが、わかりません可能であれば。

私のコードをお見せしましょう:

#!/bin/bash
while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
  if [ $f3 -gt 500 ]
  then
     echo "$f1:$f2:$f3:$f4:$f5:$f6:$f7"  <<< there is a single command for that ?
  fi
done < /etc/passwd

あなたの応答をありがとう:)

4

4 に答える 4

3

試す

awk -F: '$3>=500 {print $0}' /etc/passwd
于 2012-11-24T12:54:24.893 に答える
1

配列を使用します。

#!/bin/bash
while IFS=: read -r -a f; do
  if (( ${f[2]} > 500 )); then
     IFS=: b="${f[*]}"
     echo "$b"
  fi
done < /etc/passwd
于 2012-11-24T13:21:25.177 に答える
0

bash ソリューション:

while read  line
do
  arr=(${line//:/ })
  [ ${arr[2]} -gt 500 ] && echo $line
done < /etc/passwd

レコード全体を配列に分割し、ユーザー ID を含む 2 番目のインデックス要素をチェックします。

于 2012-11-24T13:20:23.037 に答える
0

行全体を 1 つの変数に読み込んでから、ループ内で分割します。

while read line; do
    old=IFS
    IFS=:
    set -- $line
    IFS=$old
    test $3 -gt 500 || continue
    printf "%s\n" "$line"
done </etc/passwd
于 2012-11-24T13:14:42.010 に答える