あなたがバッシュを使用している場合は、条件として算術式(((...))
)を使用する方が簡単です:
#!/bin/bash
filename=/etc/group
while IFS=: read -r user _ gid _
do
((gid <= 20 && gid <= 60)) && echo " $gid - $user"
done < "$filename"
注関心のないフィールドを無視する_
の使用、どの一般に使用されている規則です。 3つ以上のフィールドがある可能性があるため、末尾に_
があることが重要です。そうでない場合は、$gid
はの残りの部分を入力行のとして受け取ります。
- 定期
read
で-r
を使用すると、\
文字の不要な解釈を避けるために形成するのは良い習慣です。入力に
((...))
は$((...))
と同様に、演算式をサポートしていますが、条件の結果を決定ブールとして計算結果を解釈条件として使用されます。バッシュの構文を使用して
[ "$gid" -ge 20 ] && [ "$gid" -le 60 ]
- :POSIX準拠の
[ ... ]
構文[1] を使用して
- :
あなたが-ge
と-le
を使用したい場合、あなたはできる、と述べた
-
[[ $gid -ge 20 && $gid -le 60 ]]
[1] [ "$gid" -ge 20 -a "$gid" -le 60 ]
は、通常はあまりにも動作しますが、-a
と-o
演算子は旧式と考えられています。
!#/ bin/bashの#を忘れてしまい、フォーマットについてごめんね。なぜそれが行を分けていないのか分からない –
あなたには新参者に標準的なアドバイスを与えることができます:答えがあなたの問題を解決するならば、それの横にある大きなチェックマーク(✓) - 投票する(上向き投票には少なくとも15の評判ポイントが必要)。 他の回答が有益だった場合は、投票してください。受諾およびアップ投票は将来の読者に役立ちます。関連するヘルプセンターの記事(http://stackoverflow.com/help/someone-answers)を参照してください。質問にまだ完全に回答していない場合は、フィードバックを提供してください。最高の解決策を自分で見つけたと思ったら、それを回答として投稿し、自己受け入れます。 – mklement0