我在尝试通过我的/ etc / group文件循环bash脚本时遇到一些困难,并且仅使用20-60之间的GID回显那些。这是我到目前为止所拥有的。
#!/bin/bash
filename=/etc/group
while IFS=: read user x gid
do
echo " $gid - &user"
done < $filename
我刚刚开始学习bash脚本,任何帮助都将不胜感激。
答案 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 。
-r
和read
是一个很好的习惯,可以避免对\
字符进行不必要的解释。在输入中。 (( ... ))
支持算术表达式的方式与$(( ... ))
相同,但用作条件,将计算结果解释为 Boolean < / em>确定条件的结果。
-ge
和-le
,你可以:
[ ... ]
语法 [1]
:[ "$gid" -ge 20 ] && [ "$gid" -le 60 ]
[[ $gid -ge 20 && $gid -le 60 ]]
[1] [ "$gid" -ge 20 -a "$gid" -le 60 ]
通常也有效,但-a
和-o
运算符被认为是过时的。