1

我有一个脚本可以在 /etc/passwd 中恢复一行的 UID,但前提是 UID > 500。这是可行的,但是...我只想用一个命令恢复所有行,但我不知道如果它是可能的。

让我向您展示我的代码:

#!/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

我会将整行读入一个变量,然后在循环内拆分。

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 回答
0

一个bash解决方案:

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

将整个记录拆分为一个数组并检查包含用户 ID 的第二个索引元素。

于 2012-11-24T13:20:23.037 回答