ウェブサイト検索

10のクールで素晴らしいBashループの例


したがって、bashの例を学ぶことは、スクリプトを作成するスキルを向上させるのに役立ちます。このチュートリアルでは、スクリプト作成スキルを向上させるために試すことができる10のクールで素晴らしいbashループの例を含めます。

10のクールで素晴らしいBashループの例

このセクションでは、ループで使用したさまざまな例とアプローチについて説明します。

Bashでのループを用いたSeqコマンド

for ループ内で seq コマンドを使用して数の列を作成できます。たとえば、次のコードを含む bash スクリプト「File.sh」があります:

#!/bin/bash
for A in $(seq 5 2 25)
do
  echo "numbers of $A are"
done

スクリプトをターミナルで実行した後、次の結果が得られます:

./File.sh

ループを使用してファイルの名前を変更する

bashスクリプトを使用すると、forループを使って複数のファイルの名前を変更できます。例えば、複数の.txtファイルがあり、ファイル名に現在の日付を追加したい場合、以下のサンプルスクリプトを使うことができます:

#!/bin/bash
for X in $(ls *.txt); do
 mv $X $(basename $X .txt)_$(date +%d%m).txt
done

これで、スクリプトを実行できるようになり、現在の日付を追加することで、すべての.txtファイルの名前が変更されます:

./MyFile.sh

同様に、単一のスクリプトを通じてファイルの拡張子を変更することができます。それでは、次のスクリプトを使って .txt 拡張子を .sh に変更しましょう:

#!/bin/bash
for X in *.txt; do
   mv -- "$X" "${X%.txt}.sh"
done

ターミナルでスクリプトを実行した後、.txtファイルではなく.shファイルが得られます:

./MyFile.sh

Bashの無限ループ

ループに終了条件が定義されていない場合、それは無限ループと呼ばれます。このBashループの例では、Bashの無限forループを見ていきます。次の無限forループは二重セミコロン( ; ; )で定義されており、初期部分、アクション部分、または終了部分を含んでいません。

以下のスクリプトは、Ctrl+Cを押すか、入力として「quit」と入力するまで続きます。このスクリプトは、入力として与えられた10から50までのすべての数字を印刷します。そうでなければ、「数値は範囲外です。」と印刷されます。

#!/bin/bash
#infinite loop
for (( ; ; ))
do
  echo "Enter a number between 10 to 50"
  read n
  if [ $n == "quit" ]
  then
    echo "terminated"
    exit 0
  fi
  if (( $n < 10 || $n > 50 ))
  then
    echo "The number is out of range"
  else
    echo "The number is $n"
  fi
done

私たちは上記のスクリプトに45と23の有効な入力を与えました。その後、入力として2を印刷し、出力に「数値が範囲外です」と表示されます。それから、スクリプトを閉じるために、入力としてquitとタイプします。また、無限ループを終了するためにCtrl+Cを押すこともできます。

Bashの三項演算子ループ

三式ループの名前からわかるように、それは三つの式、つまり制御式から成ります。最初の式(EXP1)は初期化式、二番目の式(EXP2)はループのテストまたは条件、そして三番目の式(EXP3)はカウント式/ステップです。bashで三式ループを実行してみましょう:

#!/bin/bash
for  (( n=5; n>=1; n-- ))
do
 echo "Book $n"
done

上記のスクリプトを実行すると、以下の出力が得られます。

複数条件のループ

次のbashループの例では、複数の条件を持つuntilループを使用しました。このスクリプトでは、値がそれぞれ20と10の変数「m」と「n」を取り、限界を15に設定しました。ここでは、「m」と「n」の条件をループ内で一緒に置き、ループは「m」の値が限界より小さい間、かつ「n」が限界より大きい間実行されます。

#!/bin/bash
limit=15
m=20
n=10
until [[ $m -lt $limit || $n -gt $limit ]];
do
echo "If M = $m then N = $n"
((m--))
((n++))
done

上記のスクリプトを実行すると、mとnの値が同じレベルになるまで実行されることがわかります。

Bashでファイルを読む

bashでは、ファイルの内容をさまざまな方法で読み取ることができます。このbashループの例では、ファイル名を通じてファイルの内容を読み取ります。次のスクリプトを使用してbashでファイルを読み取ることができます:

#!/bin/bash
echo "Content of the entered file is:"
while
read line
do
 echo $line
done <~Documents/Linuxhint.txt

上記のスクリプトを実行した後、入力したファイルの全コンテンツを読むことができます。

ファイルに書き込む

スクリプト内のループを使用して、ターミナルから直接ファイルを編集できます。たとえば、「Example.txt」というテキストファイルがあり、情報を追加したい場合、次のスクリプトを使用できます。

上記のスクリプトを実行すると、詳細を入力するように求められます:

詳細を入力したら、CTRL + Dでファイルを保存し、CTRL + Zでプロセスを正常に終了してください。

BashにおけるBreakおよびContinueステートメントのループ

bashでは、breakの後にループ文を続けることができます。break文はループを終了し、その後次の指定された文に制御を渡します。現在の反復が同じcontinue文でスキップされた後、2回目のイテレーションが始まります。

#!/bin/bash
num=16
until false
do
 ((num--))
 if [[ $num -eq 13 ]]
 then
  continue
 elif [[ $num -le 4 ]]
 then
  break
 fi
 echo "LinuxHint = $num"
done

以下のbashスクリプトでは、「num」が13に等しいとき、ループの残りの本体をスキップして次の反復にジャンプすることがわかります。同様に、「num」が4以下のときはループが終了します。

上記のスクリプトは、ループが15から始まり、13で中断し、5まで続くことを示しています。

Bashでの平均値の計算

ユーザーは、bashループでスクリプトを実行することによって平均を計算できます。これにより、ユーザーは定義された範囲内の数値の平均を計算できます。次のスクリプトは、ユーザーが提供した入力の平均を計算します。

#!/bin/bash
marks="0"
AVERAGE="0"
SUM="0"
NUM="0"
while true; do
   echo -n "Enter your marks to calculate average or press 'q' to abort/finish: "; read marks;

   if [ "$marks" = "q" ]; then
    echo "average marks are: $AVERAGE"
    break
   elif [ "$marks" -lt 50 ] || [ "$marks" -gt 100 ]; then
    echo "Marks should be between 50 and 100. Please enter your marks: "
   else
     SUM=$(($SUM + $marks))
     NUM=$(($NUM + 1))
     AVERAGE=$(($SUM / $NUM))
   fi
done

入力が範囲内でない場合、「成績を入力してください」と表示されます。ユーザーがすべての成績を入力した後に「q」を押すと、スクリプトは入力されたすべての数値の概算平均を計算します。

上記のスクリプトが実行されると、出力はこのようなものになります。

Bashでコマンドライン引数を読む

Bashでは、ループを使って単一のコマンドライン引数を読み取ることができます。このスクリプトは、フォーマットされた引数の値を印刷します。次のスクリプトでは、whileループを使用してBashでコマンドライン引数を実行します。これによって、単一のコマンドの助けを借りて、有効なオプションとして引数の値を渡す値を印刷することができます。

#!/bin/bash
while getopts N:F:M: OPT
do
 case "${OPT}" in
  N) name=${OPTARG};;
  F) fathername=${OPTARG};;
  M) mothername=${OPTARG};;
  *) echo "Invalid"
    exit 1;;
  esac
done
printf "Name:$name\nFather Name:$fathername\nMother Name:$mothername\n"

そのため、上記のスクリプトをbashで実行することによって、フォーマットされた引数の値を出力に印刷することができます。

まとめ

これが、学ぶことができる10のクールで素晴らしいbashループの例に関する簡単な情報です。私たちは、インタラクティブスクリプトを簡単に作成するために、さまざまなタイプのループを使用しました。さらに、上記の例で使用される基本的なアプローチについても説明しました。bashのループについて詳細な情報がある場合は、私たちの公式ウェブサイトを訪れて、さらに詳しく知ってください。