如何使用-ge和-le(bash脚本)从20-60开始检查GID' s

时间:2016-12-12 23:03:30

标签: bash loops scripting

我在尝试通过我的/ etc / group文件循环bash脚本时遇到一些困难,并且仅使用20-60之间的GID回显那些。这是我到目前为止所拥有的。

#!/bin/bash
filename=/etc/group

while IFS=: read user x gid
do
echo " $gid - &user"
done < $filename

我刚刚开始学习bash脚本,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果你正在使用Bash,那么使用算术表达式((( ... )))作为条件更容易:

#!/bin/bash

filename=/etc/group

while IFS=: read -r user _ gid _
do
    (( gid <= 20 && gid <= 60)) && echo " $gid - $user"
done < "$filename"
  • 请注意使用_忽略不感兴趣的字段,这是常用的惯例;由于可能有超过3个字段,因此尾随_很重要,否则$gid会收到输入行的整个 rest

    • 定期使用-rread是一个很好的习惯,可以避免对\字符进行不必要的解释。在输入中。
  • (( ... ))支持算术表达式的方式与$(( ... ))相同,但用作条件,将计算结果解释为 Boolean < / em>确定条件的结果。

    • 也就是说,如果你想使用-ge-le,你可以:
      • 使用符合POSIX的[ ... ]语法 [1]
        [ "$gid" -ge 20 ] && [ "$gid" -le 60 ]
      • 使用Bash语法:
        [[ $gid -ge 20 && $gid -le 60 ]]

[1] [ "$gid" -ge 20 -a "$gid" -le 60 ]通常也有效,但-a-o运算符被认为是过时的