2016-12-12 5 views
0

私の/ etc/groupファイルからbashスクリプトループを作成しようとすると少し難しそうですGIDが20〜60の間のみ。ここまで私がこれまで持っていたことがあります。-geと-le(bashスクリプト)でGIDのループチェックを行うにはどうすればいいですか?

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

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

私はちょうどbashスクリプトを習得し始めています。何か助けていただければ幸いです。

+0

!#/ bin/bashの#を忘れてしまい、フォーマットについてごめんね。なぜそれが行を分けていないのか分からない –

+0

あなたには新参者に標準的なアドバイスを与えることができます:答えがあなたの問題を解決するならば、それの横にある大きなチェックマーク(✓) - 投票する(上向き投票には少なくとも15の評判ポイントが必要)。 他の回答が有益だった場合は、投票してください。受諾およびアップ投票は将来の読者に役立ちます。関連するヘルプセンターの記事(http://stackoverflow.com/help/someone-answers)を参照してください。質問にまだ完全に回答していない場合は、フィードバックを提供してください。最高の解決策を自分で見つけたと思ったら、それを回答として投稿し、自己受け入れます。 – mklement0

答えて

1

あなたがバッシュを使用している場合は、条件として算術式(((...)))を使用する方が簡単です:

#!/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演算子は旧式と考えられています。

関連する問題