例を使用してBashでループを作成する方法

で自動化する方法 bash Linux / UNIXオペレーティングシステムでのforループ? break、continue、およびループ制御式のパラメーターを使用するにはどうすればよいですか? forループを使用してファイルを操作するにはどうすればよいですか?

forループは、プログラミングの世界で多くの問題を解決するための非常に便利なツールであるため、現実の世界でいくつかの問題を解決します。 Linuxでは、Bash、Pythonを介したループを使用して、パスワードスクリプト、カウントスクリプトなどの自動化を行います。 この記事では、Bashのすべての種類のループについて説明します。

1)forループ

Forループを使用して、リスト内のすべての要素またはそれらの一部を読み取り、これらの要素を画面に表示できます。

Forループの構文

element1の変数の場合element2element3または
行う
コマンド
終わり

曜日ごとに挨拶メッセージを送信するスクリプトを作成するので、 for ループして毎日読み、印刷します。 ファイルを作成する welcome.shnano 以下のエディタと貼り付けコード。

#!/bin/bash
for day in Sunday Saturday Monday Tuesday Wednesday Thursday Friday
do
echo "Welcome $day day"
done

を実行します welcome.sh とファイル bash 指図。

$ bash welcome.sh

output
Welcome Sunday day
Welcome Saturday day
Welcome Monday day
Welcome Tuesday day
Welcome Wednesday day
Welcome Thursday day
Welcome Friday day

forループは、リスト内の各アイテムをそれぞれ取得し、このアイテムを変数に割り当てます $day、その後、コードを実行します dodone 次に、一番上に戻り、リスト内の次の項目を割り当てて、繰り返します。

forループのある範囲を使用して、開始点と終了点を配置できます。

#!/bin/bash
for i in {10..20}
do
echo "Welcome $i times"
done

$ bash range.sh

output
Welcome 10 times
Welcome 11 times
Welcome 12 times
Welcome 13 times
Welcome 14 times
Welcome 15 times
Welcome 16 times
Welcome 17 times
Welcome 18 times
Welcome 19 times
Welcome 20 times

1から20までの偶数を数えたい場合は、範囲のステップを追加します。

#!/bin/bash
for i in {10..20..2}
do
echo "Welcome $i times"
done

$ bash even.sh

output
Welcome 10 times
Welcome 12 times
Welcome 14 times
Welcome 16 times
Welcome 18 times
Welcome 20 times

forループを使用した別のタイプの使用ステップ。

#!/bin/bash
for ((i=1;i<=25;i+=5))
do
echo $i
done

$ bash step5.sh

output
1
6
11
16
21

そして、負のステップには、次のタイプを使用できます。

#!/bin/bash
for ((i=25;i>=1;i-=5))
do
echo $i
done

$ bash step-5.sh

output
25
20
15
10
5

Forループの例

1)forループを使用してファイルに作用する

Bash Forループは、ファイルで作業する場合の最良の方法です。

#!/bin/bash
for file in ~/*.txt
do
echo $file
done

$ bash find_txt.sh

output
/root/cat.txt
/root/echo.txt
/root/file.txt
/root/f.txt
/root/nano.txt
/root/printf.txt

2)1行のForループ

Forループを1行で実行できるので、すべての名前を変更します *.txt ファイル拡張子を削除するファイル。

$ for filename in *.txt; do mv "$filename" "${filename%.txt}"; done

またはスクリプトで

!#/bin/bash
for filename in *.txt
do
mv "$filename" "${filename%.txt}"
done

3)コマンドライン引数の読み取り

Forループスクリプトを実行しているときは、引数を入力できます。

for myvalue in $*
do
echo "Argument: $myvalue"
done

$ bash linoxide.sh I Love LinOxide

output
Argument: I
Argument: Love
Argument: LinOxide

4)奇数と偶数を読む

偶数と奇数を読み取るスクリプトを作成します。

for (( n=10; n<=15; n++ ))
do
if (( $n%2==0 ))
then
echo "$n is even"
else
echo "$n is odd"
fi
done

$ bash even_odd.sh

output
10 is even
11 is odd
12 is even
13 is odd
14 is even
15 is odd

2)whileループ

ループは条件に依存しますがtrueですが、条件がfalseの場合、インタープリターはループから抜け出します。

whileループの構文

その間 [ <some condition> ]行う
<コマンド>
終わり

10から20まで数え、結果を印刷します。 したがって、カウンターが20以下であるという条件を設定します。

#!/bin/bash
# Basic while loop
counter=10
while [ $counter -le 20 ]
do
echo Number : $counter
((counter++))
done

$ bash while.sh

output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Number : 16
Number : 17
Number : 18
Number : 19
Number : 20

3)ループまで

whileループのようにループするまで、しかしインタプリタは条件が真になるまでその中のコマンドを実行します。

までループの構文

それまで [ <some condition> ]行う
<コマンド>
終わり

10から20まで数え、結果を印刷します。 したがって、カウンターが20以上であるという条件を設定します。

#!/bin/bash
# Basic Until loop
counter=10
until [ $counter -gt 20 ]
do
echo Number : $counter
((counter++))
done

$ bash until.sh

output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Number : 16
Number : 17
Number : 18
Number : 19
Number : 20

4)ループの制御

使用できます Break また Continue ループを制御します。

ブレークステートメント

にとって Break ステートメント、ループから抜け出すことができ、使用するときにループを完了する必要はありません if ループ内のステートメント。

#!/bin/bash
# Basic loop use break
counter=10
until [ $counter -gt 20 ]
do
echo Number : $counter
if [ $counter -eq 15 ]
then
echo Done
break
fi
((counter++))
done

$ bash break.sh

output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Done

ステートメントを続ける

にとって Continue ステートメント、私たちはループに行くことができ、私たちが使用しているときにループを終了する必要はありません if ループ内のステートメント。

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "A number is an even number!!"
continue
fi
echo "Found odd number"
done

$ bash continue.sh

output
Found odd number
A number is an even number!!
Found odd number
A number is an even number!!
Found odd number
A number is an even number!!
Found odd number

5)ループを選択

whileループとuntilループのようにループを選択しますが、シンプルなメニューシステムを作成できます。

選択ループの構文

でvarを選択します
行う
<コマンド>
終わり

3つのオプションを作成して使用します select それらから選択するためにループします。

#!/bin/bash
# select script

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you choose choice 1"
;;
"Option 2")
echo "you choose choice 2"
;;
"Option 3")
echo "you choose choice $REPLY which is $opt"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done

$ bash select.sh

output
1) Option 1
2) Option 2
3) Option 3
4) Quit
Please enter your choice: 1
you chose choice 1
Please enter your choice: 5
invalid option 5
Please enter your choice: 4

結論

  1. 同期、パスワードの作成、バックアップなどで使用されるBashForループ…
  2. do whileはwhileと同じですが、インタプリタは条件なしで最初のコードを実行します
  3. ループから抜け出すには、breakステートメントが非常に重要です
  4. Selectステートメントは、多くのオプションがある場合に役立ちます

また読む:

  • Linuxでのシバンの機能は何ですか?
  • 70シェルスクリプトインタビューの質問と回答