すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
Javaの文字列形式

シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>
ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>
#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com

名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。

エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age
説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。
説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー
8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ
説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。

ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは
10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 、 などの特別な変数を使用してスクリプト内でアクセスできます。 は最初の引数を表し、 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名:
すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。
- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
echo 最初の引数:
echo 第 2 引数:
`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。

cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり
説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。

for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum
説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。
- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。
説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ
説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ
説明:
Javaの挿入ソート
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。

ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result
説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。

階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。
シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。

重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password
注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print }’)
echo $directory 内のファイルの合計サイズ: $total_size
説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print }’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。

ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 | 「if」ステージメント | 「elif」ステートメント |
---|---|---|
目的 | シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 | 最初の if 条件が false の場合にチェックする代替条件を提供します。 |
使用法 | 初期状態に使用されます。 | 最初の if 条件の後に追加の条件を確認するために使用されます。 |
ブロック数 | if ブロックは 1 つだけ持つことができます。 | 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 |
実行 | 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 | 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 |
入れ子構造 | 他の if、elif、または else ブロック内にネストできます。 | 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 |
例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ
説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。

if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり
説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり
説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。

while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=″
if [ -z $ディレクトリ ];それから
エコーの使用量:すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。
- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty
説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=″ `: この行は、最初のコマンドライン引数 ( で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量:
`: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、`すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>
ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>
#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>
例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
` はスクリプトの名前を表します。すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>
ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>
#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>
例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。

空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
system.out.println
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>
例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!

名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=″
if [ -z $ディレクトリ ];それから
エコーの使用量:すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。
- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり
説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量:
: ディレクトリが空の場合、この行はスクリプト名 (すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>
ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>
#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>
例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
) を含む使用法メッセージを出力します。すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>
ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>
#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>
例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result文字から文字列へ#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum
説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。

算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=''
if [ -z $host ];それから
エコーの使用量:すべての Linux ディストリビューションにおいて、シェル スクリプトはプロセスを自動化し、ユーザーの時間を節約し、生産性を向上させる魔法の杖のようなものです。この Shall スクリプト チュートリアルでは、25 個以上の Shall スクリプトの例を紹介します。
しかし、本題に移る前に、 シェルスクリプト 例として、シェル スクリプトとシェル スクリプトの実際の使用例を理解しましょう。
シェルスクリプトとは何ですか?
さて、シェルは、 CLI ( コマンドラインインタープリタ )、ユーザーがシェル コマンドを管理および実行できるテキスト ウィンドウで実行されます。一方、Linux システム上で実行される一連のコマンドを記述するプロセス。そのような命令を含むファイルは bash スクリプトと呼ばれます。
シェルスクリプトの使用
以下に、シェル スクリプトの一般的な使用法をいくつか示します。
- タスクの自動化 – 定期的なバックアップやソフトウェアのインストールタスクなどの反復的なタスクを自動化するために使用できます。
- カスタマイズ – シェル スクリプトを使用してコマンド ライン環境を設計し、必要に応じてタスクを簡単に実行できます。
- ファイル管理 - シェル スクリプトは、ファイルの移動、コピー、名前変更、削除など、ファイルとディレクトリの管理と操作にも使用できます。
Linux のシェル スクリプトの例
1) シェルスクリプトの先頭にあるシバン (#!) は何を示していますか?
の シバン (#!) スクリプトの先頭にある は、スクリプトの実行に使用するインタープリターを示します。これは、どのシェルまたはインタプリタがスクリプトのコマンドを解釈すべきかをシステムに指示します。
例えば: という名前のスクリプトがあるとします。 マイスクリプト.sh Bash シェルで書かれたもの:
シバン
この例では:
- スクリプトの先頭にある #!/bin/bash は、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- echo コマンドは、端末にメッセージを出力するために使用されます。
2) コマンドラインからシェルスクリプトを実行するにはどうすればよいですか?
コマンドラインからシェルスクリプトを実行するには、次の手順に従う必要があります。
- 次のコマンドを使用して、スクリプト ファイルに実行権限があることを確認してください。 chmodコマンド :
chmod +x myscript.sh>
- ファイル名を使用してスクリプトを実行します。
./myscript.sh>ここで交換する必要があります myscrtipt.sh あなたのスクリプト名を付けてください。
3) techcodeview.com を端末に出力するシェル スクリプトを作成します。
スクリプト名 `myscript.sh` を作成します (ここでは ` を使用しています) なぜなら ` エディタ、任意のエディタを選択できます)
vim myscript.sh>#!/bin/bash
# このスクリプトは techcodeview.com を端末に出力します
エコー techcodeview.com名前を印刷する
「chmod +x」を使用してスクリプトを実行可能にし、「./myscipt.sh」を使用して実行すると、目的の出力 techcodeview.com が得られます。
4) シェルスクリプトにおける echo コマンドの目的を説明します。
の エコーコマンド 端末上にテキストまたは変数を表示するために使用されます。これは、メッセージ、変数値の出力、プログラム出力の生成によく使用されます。
エコーコマンド
この例では、シェル スクリプト内で同じように動作するため、ターミナル上で直接 `echo` を実行しています。
5) シェルスクリプトで変数に値を割り当てるにはどうすればよいですか?
変数には、代入演算子 = を使用して値が割り当てられます。
例えば:
#!/bin/bash
# 変数に値を代入する
名前=ジェイシュ
年齢=21歳
エコー $name $age説明:
- name 変数には値 Jayesh が割り当てられます。
- age 変数には値 21 が割り当てられます。
- echo は出力に使用され、`$name` `$age` は変数に格納されている値を呼び出すために使用されます。
6) ユーザーの名前を入力として受け取り、ユーザーに挨拶するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
# ユーザーに名前を尋ねます
エコー あなたの名前は何ですか?
名前の読み
# ユーザーに挨拶する
エコー こんにちは、$name!はじめまして。説明:
- #!/bin/bash: これはシバン行です。これは、Bash インタープリターを使用してスクリプトを実行するようにシステムに指示します。
- # ユーザーに名前を尋ねます: これはコメントです。今後のコードに関するコンテキストを提供します。コメントはインタプリタによって無視されます。
- echo あなたの名前は何ですか?: echo コマンドは、端末上に二重引用符で囲まれたテキストを表示するために使用されます。
- read name: read コマンドは、ユーザーがテキストを入力するのを待ち、それを変数名に保存します。
- エコー こんにちは、$name!初めまして。: この行では、echo コマンドを使用して、ユーザーの入力から収集された name 変数の値を含む挨拶メッセージを出力します。
7) シェルスクリプトにコメントを追加するにはどうすればよいですか?
シェルスクリプトでのコメント コードに説明やコンテキストを提供するために使用されます。これらはインタプリタによって無視され、スクリプトを読む人間のみを対象としています。 # 記号を使用してコメントを追加できます。
#!/bin/bash
# これはスクリプトの目的を説明するコメントです
エコー8) 現在のディレクトリにファイルが存在するかどうかを確認するシェル スクリプトを作成します。
以下は、example.txt という名前のファイルが現在のディレクトリに存在するかどうかを確認するスクリプトです。
#!/bin/bash
ファイル=example.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
エコー ファイルが存在します: $file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=example.txt: この行は変数ファイルを定義し、それに値 example.txt を割り当てます。これを、チェックするファイルの名前に置き換えることができます。
- if [ -e $file ]; then: この行は if ステートメントを開始します。条件 [ -e $file ] は、 file 変数の値で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在を確認するために使用されます。
- echo ファイルが存在します: $file: 条件が true (つまり、ファイルが存在する) の場合、この行はファイルの名前とともにファイルが存在することを示すメッセージを出力します。
- else: 条件が false (つまり、ファイルが存在しない) の場合、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージをファイル名とともに出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを検索中
9) シェルスクリプトにおける一重引用符 (') と二重引用符 () の違いは何ですか?
一重引用符 (') と二重引用符 () は、シェル スクリプトで文字列を囲むために使用されますが、動作は異なります。
- 一重引用符: 一重引用符の間はすべてリテラル文字列として扱われます。変数名とほとんどの特殊文字は展開されません。
- 二重引用符: 二重引用符内の変数および特定の特殊文字は展開されます。内容は変数置換、コマンド置換の対象となります。
#!/bin/bash
abcd=こんにちは
echo ‘$abcd’ # 出力: $abcd
echo $abcd # 出力: こんにちは10) シェルスクリプトでコマンドライン引数を使用するにはどうすればよいですか?
コマンドライン引数 スクリプトの実行時にスクリプトに提供される値です。 $1、$2 などの特別な変数を使用してスクリプト内でアクセスできます。$1 は最初の引数を表し、$2 は 2 番目の引数を表します。
例えば: `example.sh` にスクリプト名がある場合
#!/bin/bash
echo スクリプト名: $0
echo 最初の引数: $1
echo 第 2 引数: $2`.example.sh hello_1 hello_2` を指定してスクリプトを実行すると、次の出力が表示されます。
cli 引数
11) for ループを使用して値のリストを反復処理するにはどうすればよいですか?
スクリプト名「example.sh」を作成します。
#!/bin/bash
果物=(アップル・バナナ・チェリー・デーツ)
フルーツの場合は ${fruits[@]} にあります。する
echo 現在のフルーツ: $fruit
終わり説明:
「fruits=」行は、リンゴ、バナナ、チェリー、日付の 4 つの要素を含む、fruits という名前の配列を作成します。
- フルーツの場合は ${fruits[@]} にあります。 do: この行は for ループを開始します。各部分の意味は次のとおりです。
- for Fruit: これは、fruit という名前のループ変数を宣言します。ループの各反復で、fruit は、fruits 配列の現在の要素の値を保持します。
- ${fruits[@]}: これは、fruits 配列からすべての要素を取得する配列拡張です。 ${…} 構文により、各要素が個別の項目として扱われることが保証されます。
- do: このキーワードはループ本体の始まりを示します。
- echo 現在のフルーツ: $fruit: ループ内で、この行は echo コマンドを使用してループ変数 Fruit の現在の値を表示します。配列内の果物ごとに「現在の果物: リンゴ」のようなメッセージが出力されます。
- 完了: このキーワードはループ本体の終わりを示します。ループが終了したことをスクリプトに伝えます。
for ループ
12) ループを使用して 1 から N までの整数の合計を計算するシェル スクリプトを作成します。
スクリプト名「example.sh」を作成します。
#!/bin/bash
エコー 数字 (N) を入力してください:
Nを読む
合計=0
for (( i=1; i<=$N; i++ ));する
合計=$((合計 + i))
終わり
echo 1 から $N までの整数の合計: $sum説明:
スクリプトは、read を使用して数値 (N) を入力するように求めることから始まります。この数値により、ループが実行される回数が決まります。
- 変数 sum は 0 に初期化されます。この変数は整数の合計を追跡します。
- for ループは for (( i=1; i<=$N; i++ )) で始まります。このループ構造は、一連のアクションを特定の回数 (この場合は 1 から N の値まで) 繰り返すために使用されます。
- ループ内では次のことが起こります。
- i=1 は、各反復の開始時にループ変数 i を 1 に設定します。
- ループ条件 i<=$N は、i が依然として指定された数値 N 以下であるかどうかをチェックします。
- 条件が true の場合、ループ本体が実行されます。
- sum=$((sum + i)) は、i の現在の値を加算して、sum の新しい値を計算します。これにより、1 から現在の i 値までの整数が加算されます。
- 各反復の後、i++ は i の値を 1 ずつ増やします。
- ループは、条件 i<=$N が false になるまで (i が N より大きくなるとき) 実行され続けます。
- ループが終了すると、スクリプトは 1 から入力された数値 N までの整数の合計を表示します。
13) ファイル内の特定の単語を検索し、その出現をカウントするスクリプトを作成します。
スクリプト名「word_count.sh」を作成します。
#!/bin/bash
エコー 検索する単語を入力してください:
ターゲットワードを読む
エコー ファイル名を入力してください:
ファイル名を読み取る
count=$(grep -o -w $target_word $filename | wc -l)
echo 単語「$target_word」が「$filename」内に $count 回出現します。説明:
- echo 検索する単語を入力してください:: この行には、ファイル内で検索する単語を入力するようにユーザーに求めるメッセージが表示されます。
- read target_word: この行は、ユーザーが提供した入力を読み取り、target_word という名前の変数に保存します。
- echo ファイル名を入力してください:: この行には、検索するファイルの名前を入力するようにユーザーに求めるメッセージが表示されます。
- read filename: この行は、ユーザーが提供した入力を読み取り、それを filename という名前の変数に保存します。
- count=$(grep -o -w $target_word $filename | wc -l): この行はスクリプトの主な作業を行います。さらに詳しく見てみましょう:
- grep -o -w $target_word $filename: コマンドのこの部分では、指定されたファイル名内で target_word が出現するかどうかを検索します。オプション -o および -w を使用すると、単語全体の一致のみがカウントされます。
- |: これは、前のコマンドの出力を受け取り、それを次のコマンドの入力として送信するパイプです。
- wc -l: コマンドのこの部分では、wc コマンドを使用して入力の行数をカウントします。オプション -l は特に行数をカウントします。
- コマンド全体は、ファイル内の target_word の出現数を計算し、その数を変数 coun に割り当てます。
14) 標準出力 (stdout) と標準エラー (stderr) の違いを説明します。
標準出力 (stdout) と標準エラー (stderr) の主な違いは次のとおりです。
- 標準出力 (stdout): これは、コマンドの通常の出力が送信されるデフォルトの出力ストリームです。デフォルトでは端末に表示されます。> を使用してファイルにリダイレクトできます。
- 標準誤差 (stderr): これは、エラー メッセージと警告の出力ストリームです。デフォルトでは端末にも表示されます。 2> を使用してファイルにリダイレクトできます。
15) シェルスクリプトにおける条件文の概念を説明できる。
シェルスクリプトの条件文 これにより、特定の条件に基づいて決定を下し、スクリプトのフローを制御できるようになります。これらにより、スクリプトは、特定の条件が true か false に応じて、さまざまなコマンド セットを実行できるようになります。シェル スクリプトの主な条件ステートメントは、if ステートメント、elif ステートメント (オプション)、および else ステートメント (オプション) です。
シェル スクリプトの条件文の基本構造は次のとおりです。
if [条件];それから
# 条件が true の場合に実行するコマンド
elif [別の条件];それから
# another_condition が true の場合に実行するコマンド (オプション)
それ以外
# どの条件にも当てはまらない場合に実行するコマンド (オプション)
なれ説明:
- [ 条件 ] = 条件を評価し、true (0) または false (0 以外) の終了ステータスを返すコマンド。
- then = 条件が true と評価された場合に、それに続くコマンドが実行されることを示すキーワードです。
- elif = (else if の略) これは、チェックする追加の条件を指定できるセクションです。
- else = どの条件にも当てはまらない場合に実行されるコマンドを含むセクションです。
- fi = 条件ブロックの終わりを示すキーワードです。
16) シェルスクリプト内でファイルから行を読み取るにはどうすればよいですか?
に 行を読む シェル スクリプト内のファイルから取得するには、さまざまな方法を使用できますが、一般的なアプローチの 1 つは、while ループを read コマンドと組み合わせて使用することです。その方法は次のとおりです。
#!/bin/bash
ファイル=/ホーム/jayeshkumar/jayesh.txt
# ファイルが存在するか確認する
if [ -e $file ];それから
while IFS= 読み取り -r 行;する
エコーライン読み取り: $line
# ここに処理ロジックを追加します
完了 <$file
それ以外
echo ファイルが見つかりません: $file
なれ説明:
- #!/bin/bash: これは、スクリプトの実行に使用されるインタープリター (/bin/bash) を指定するシバン行です。
- file=/home/jayeshkumar/jayesh.txt: この行は変数ファイルを定義し、/home/jayeshkumar ディレクトリ内のファイル jayesh.txt への完全パスを割り当てます。このパスを、読み込むファイルの実際のパスと一致するように変更します。
- if [ -e $file ]; then: この行は if ステートメントを開始します。変数 $file で指定されたファイルが存在するかどうかを確認します。 -e フラグは、ファイルの存在をチェックします。
- while IFS= 読み取り -r 行; do: この行は、ファイルから行を読み取る while ループを開始します。
- IFS=: 先頭と末尾のスペースを保持するために、IFS (内部フィールド区切り文字) は空の値に設定されます。
- read -r line: ファイルから現在の行を読み取り、変数 line に保存します。
- echo 行の読み取り: $line: この行は、ファイルから読み取られた行の内容を出力します。変数 $line には、現在の行の内容が含まれます。
- # ここに処理ロジックを追加します: これは、各行を処理する独自のロジックを追加できるプレースホルダー コメントです。たとえば、行を分析したり、情報を抽出したり、内容に基づいて特定のアクションを実行したりできます。
- 完了 <$file: これは while ループの終わりを示します。 < $file は、ループによって読み取られるファイルのコンテンツをリダイレクトします。
- else: ファイルが存在しない場合 (if ステートメントの条件が false)、スクリプトは else 分岐の下でコードを実行します。
- echo ファイルが見つかりません: $file: この行は、指定されたファイルが見つからなかったことを示すエラー メッセージを出力します。
- fi: この行は if ステートメントの終わりを示します。
ファイルを読み取っています
ここでは ` を使用しました 障害者 ` コマンドを使用して現在のディレクトリのパスを取得します。
17) 指定された数値の階乗を計算する関数をシェル スクリプトに記述します。
これがスクリプトです階乗を計算する与えられた数の。
#!/bin/bash
# 階乗を計算する関数を定義する
Calculate_factorial() {
数値=$1
事実=1
for ((i=1; i<=num; i++));する
ファクト=$((ファクト * i))
終わり
$factをエコーする
}
# ユーザーに数字の入力を求める
エコー 数字を入力してください:
input_num を読み取ります
# 入力した数値を使用して、calculate_factorial 関数を呼び出します。
Factorial_result=$(calculate_factorial $input_num)
# 階乗結果を表示する
echo $input_num の階乗は次のとおりです: $factorial_result説明:
- スクリプトは、インタプリタを指定するシバン行 #!/bin/bash で始まります。
- Calculate_factorial() は関数として定義されています。引数 num を 1 つ取ります。これは、階乗を計算する必要がある数値です。
- 関数内では、fact は 1 に初期化されます。この変数には階乗結果が格納されます。
- for ループは 1 から指定された数値 (num) まで繰り返します。各反復で、fact の現在値にループ インデックス i を乗算します。
- ループが完了すると、ファクト変数には計算された階乗が含まれます。
- スクリプトは、ユーザーに read を使用して数値を入力するよう求めます。
- ユーザーが指定した数値を使用してcalculate_factorial関数が呼び出され、結果が変数factorial_resultに格納されます。
- 最後に、スクリプトは計算された階乗結果を表示します。
階乗
18) シェルスクリプトで Ctrl+C などの信号をどのように処理しますか?
シェル スクリプトでは、trap コマンドを使用して、Ctrl+C (SIGINT とも呼ばれる) などのシグナルを処理できます。 Ctrl+C は、ユーザーが実行中のスクリプトまたはプログラムを中断するために押すと、SIGINT 信号を生成します。 Trap コマンドを使用すると、特定の信号を受信したときに実行するアクションを指定できます。シェル スクリプトで Ctrl+C などの信号を処理する方法は次のとおりです。
#!/bin/bash
掃除() {
echo スクリプトが中断されました。クリーンアップを実行しています…
# ここにクリーンアップアクションを追加します
出口1
}
# Ctrl+C (SIGINT) を受信したときにクリーンアップ関数を呼び出すトラップを設定する
トラップのクリーンアップ SIGINT
# スクリプトの残りの部分
エコー 実行中…
睡眠10
エコー終了。シグナルの処理は、スクリプトを堅牢にし、予期しない割り込みを確実に適切に処理するために重要です。ファイルを閉じる、プロセスを停止する、スクリプトが終了する前に情報を記録するなど、特定のニーズに合わせてクリーンアップ機能をカスタマイズできます。
説明:
- #!/bin/bash: このシバン行は、スクリプトの実行に使用されるインタープリターを指定します。
- cleanup() { … }: これは cleanup という名前の関数を定義します。この関数内には、ファイルを閉じる、リソースを解放する、その他のクリーンアップ タスクを実行するなど、スクリプトが中断されたときに実行する必要があるアクションを含めることができます。
- トラップ クリーンアップ SIGINT: トラップ コマンドは、シグナル ハンドラーをセットアップするために使用されます。この場合、SIGINT シグナル (Ctrl+C) を受信したときにクリーンアップ関数を実行するように指定します。
- echo Running…、sleep 10、echo Finished.: これらは、スクリプトの実行をシミュレートするための単なるサンプル コマンドです。
19) テキスト ファイル内の重複行をチェックして削除するスクリプトを作成します。
これは、テキスト ファイルから重複行を削除する Linux スクリプトです。
#!/bin/bash
input_file=input.txt
出力ファイル=出力.txt
$input_file を並べ替える | uniq> $output_file
echo 重複行は正常に削除されました。説明:
- スクリプトはシバン (#!/bin/bash) で始まり、スクリプトが Bash シェルを使用して解釈される必要があることを示します。
- input_file 変数は、重複行を含む入力ファイルの名前に設定されます (これを実際の入力ファイル名に変更します)。
- Output_file 変数は、重複が削除される出力ファイルの名前に設定されます (これを目的の出力ファイル名に変更します)。
- スクリプトは、sort コマンドを使用して入力ファイル内の行を並べ替えます。行を並べ替えると、重複した行が確実にグループ化されます。
- 並べ替えられた行は uniq コマンドに渡され、連続する重複行が削除されます。このプロセスの出力は出力ファイルにリダイレクトされます。
- 重複が削除されると、スクリプトは成功メッセージを出力します。
重複行の削除
ここでは ` を使用します 猫 ` を使用して、テキスト ファイル内のテキストを表示します。
20) 安全なランダムパスワードを生成するスクリプトを作成します。
安全なランダムパスワードを生成するスクリプトは次のとおりです。
#!/bin/bash
# ランダムなパスワードを生成する関数
生成_パスワード() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# 関数を呼び出し、生成されたパスワードを保存します
パスワード=$(パスワードの生成)
echo 生成されたパスワード: $password注: ユーザーは、数字「12」を置き換えることにより、パスワードの長さを変更できます。
説明:
- スクリプトはシバン (#!/bin/bash) で始まり、Bash シェルを使用して解釈される必要があることを示します。
- generate_password 関数は、ランダムなパスワードを生成するために定義されています。仕組みは次のとおりです。
- tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
- fold -w 12 は、フィルター処理されたランダム データを幅 12 文字の行に分割します。
- head -n 1 は最初の行を選択し、実質的に長さ 12 の文字のランダムなシーケンスを与えます。
- パスワード変数には、generate_password 関数を呼び出した結果が割り当てられます。
- 最後に、生成されたパスワードが echo を使用して表示されます。
21) ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトを作成します。
以下は、ディレクトリ内のすべてのファイルの合計サイズを計算するシェル スクリプトです。
#!/bin/bash
directory=/path/to/your/directory
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo $directory 内のファイルの合計サイズ: $total_size説明:
- スクリプトは #!/bin/bash シバンで始まり、Bash シェルを使用して解釈される必要があることを示します。
- ディレクトリ変数は、合計ファイル サイズを計算するディレクトリのパスに設定されます。 /path/to/your/directory を実際のパスに置き換えます。
- du コマンドは、ファイルスペースの使用量を見積もるために使用されます。使用されるオプションは次のとおりです。
- -c: 総計を生成します。
- -s: 指定したディレクトリの合計サイズのみを表示します。
- -h: サイズを人間が判読できる形式 (KB、MB、GB など) で出力します。
- du の出力は grep total にパイプされて、合計サイズを含む行がフィルターで除外されます。
- awk ‘{print $1}’ は、行から最初のフィールド (合計サイズ) を抽出するために使用されます。
- 計算された合計サイズは total_size 変数に格納されます。
- 最後に、スクリプトは echo を使用して合計サイズを表示します。
ファイルの合計サイズ
ここでは ` を使用しました 障害者 ` コマンドを使用して、現在のディレクトリのパスを確認します。
22) シェルスクリプトにおける if 文と elif 文の違いを説明します。
特徴 「if」ステージメント 「elif」ステートメント 目的 シェルスクリプトの if ステートメントと elif ステートメントの違いを説明します。 最初の if 条件が false の場合にチェックする代替条件を提供します。 使用法 初期状態に使用されます。 最初の if 条件の後に追加の条件を確認するために使用されます。 ブロック数 if ブロックは 1 つだけ持つことができます。 複数の elif ブロックを含めることができますが、else ブロックは 1 つだけです (オプション)。 実行 条件が true の場合、if ステートメントに関連付けられたコード ブロックを実行します。条件が false の場合、else ブロック (存在する場合) が実行されます (オプション)。 各 elif 条件を順番にチェックします。 1 つの elif 条件が true の場合、対応するコード ブロックが実行され、スクリプトは条件付きブロック全体を終了します。 elif 条件がいずれも true でない場合は、else ブロック (存在する場合) が実行されます。 入れ子構造 他の if、elif、または else ブロック内にネストできます。 別の elif ブロック内でネストすることはできませんが、if または else ブロック内で使用できます。 例を挙げて理解しましょう。
#!/bin/bash
数値=5
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
それ以外
echo $number は 10 以下です
なれ
エコー - -
if [ $number -gt 10 ];それから
echo $number は 10 より大きいです
elif [ $number -eq 10 ];それから
echo $number は 10 に等しい
それ以外
echo $number は 10 未満です
なれ説明:
この例では、最初の if ブロックは、数値が 10 より大きいかどうかをチェックします。そうでない場合は、数値が 10 以下であることを示すメッセージを出力します。elif ステートメントを含む 2 番目のブロックは、複数の条件の 1 つが true になるまで、複数の条件を順番にチェックします。この場合、number の値は 5 であるため、出力は次のようになります。
if_elif の違い
23) コマンドを繰り返し実行するには、while ループをどのように使用しますか?
while ループは、指定された条件が true である限り、一連のコマンドを繰り返し実行するためにシェル スクリプトで使用されます。ループは、条件が false になるまでコマンドの実行を続けます。
while ループの基本的な構文は次のとおりです。
一方[状態];する
# 実行するコマンド
終わり説明:
- `while` ループはキーワード `while` で始まり、その後に角括弧 `[ ]` で囲まれた条件が続きます。
- 実行するコマンドを含むループの本体は、`do` および `done` キーワードで囲まれます。
- ループは最初に条件をチェックします。条件が true の場合、ループ本体内のコマンドが実行されます。ループ本体の実行後、条件が再度チェックされ、条件が false になるまでプロセスが繰り返されます。
例: 1から5までの数字を出力したい場合
#!/bin/bash
カウンタ=1
while [ $counter -le 5 ];する
エコー番号: $counter
カウンタ=$((カウンタ + 1))
終わり説明:
- カウンタ変数は 1 に設定されます。
- while ループは、counter の値が 5 以下であるかどうかをチェックします。この条件が true である限り、ループは実行を続けます。
- ループ内では、カウンターの現在値が echo を使用して出力されます。
- カウンタは、式 $((counter + 1)) を使用して 1 ずつ増分されます。
while ループ
24) ディレクトリ内のすべての空のファイルを検索して一覧表示するシェル スクリプトを作成します。
`find` および `stat` コマンドを使用して、ディレクトリ内のすべての空のファイルを検索して一覧表示するために使用できるシェル スクリプト:
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれ
$directory 内の空のファイルをエコーします:
find $directory -type f -empty説明:
- ` #!/bin/bash `: これはシバンと呼ばれ、スクリプトを解釈して実行するために Bash シェルを使用するようにオペレーティング システムに指示します。
- ` ディレクトリ=$1″ `: この行は、最初のコマンドライン引数 ($1 で示される) を変数 ` に割り当てます。 ディレクトリ `。
- ` if [ -z $ディレクトリ ];それから `: この行は、` かどうかをチェックする if ステートメントを開始します。 ディレクトリ ` 変数が空です (-z は空の文字列をテストします)。
- ` エコーの使用量: $0 `: ディレクトリが空の場合、この行は使用方法のメッセージを出力します。ここで、` $0 ` はスクリプトの名前を表します。
- ` 出口1 `: この行は、終了コード ` でスクリプトを終了します。 1 `、エラーを示します。
- ` なれ `: この行は ` の終わりを示します もし ` ステートメント。
- ` もし [ ! -d $ディレクトリ];それから `: これにより、指定されたディレクトリが存在するかどうかを確認するための別の if ステートメントが開始されます (` -d ` ディレクトリをテストします)。
- ` エコー エラー: 「$directory」は有効なディレクトリではありません。 `: 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- ` 出口1 `: 終了コード ` でスクリプトを終了します。 1 `。
- ` なれ `: 2 番目の ` の終わりをマークします もし` 声明。
- ` $directory 内の空のファイルをエコーします: `: ここまでのすべてが有効な場合、この行は、スクリプトが指定されたディレクトリ内の空のファイルをリストすることを示すメッセージを出力します。
- ` find $directory -type f -empty `: この行では ` が使用されています 探す ` 空のファイルを検索するコマンド (` -空の `) タイプの通常ファイル (`) -タイプf `) 指定されたディレクトリにあります。次に、これらの空のファイルをリストします。
空のファイルを見つける
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/ のパスを使用しました。
25) シェルスクリプトにおける read コマンドの目的は何ですか?
シェル スクリプトの read コマンドを使用すると、スクリプトは情報を要求します。それは、コンピューターがあなたに質問し、あなたの答えを待つようなものです。これは、何かを入力する必要があるスクリプトや、スクリプトがファイルからの情報を処理する必要がある場合に便利です。 read コマンドを使用すると、スクリプトが停止して入力内容を待機し、その情報を使用してスクリプト内でさらに多くの処理を行うことができます。
読み取りコマンドの構文:
read variable_name>例 : ユーザーからの入力として名前を取得して印刷したい場合。
#!/bin/bash
エコー あなたの名前を入力してください:
名前の読み
エコー こんにちは、$name!名前を読みます
要約すると、read コマンドは、シェル スクリプト内のファイルからユーザー入力またはデータをキャプチャするために使用され、スクリプトをより対話的で多用途なものにします。
26) ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトを作成します。
これは、ディレクトリ内のすべてのファイル名を小文字に変換するシェル スクリプトです。
#!/bin/bash
ディレクトリ=$1″
if [ -z $ディレクトリ ];それから
エコーの使用量: $0
出口1
なれもし [ ! -d $ディレクトリ];それから
エコー エラー: 「$directory」は有効なディレクトリではありません。
出口1
なれcd $ディレクトリ ||出口1
* 内のファイルの場合;する
if [ -f $file ];それから
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
なれ
終わり説明:
- #!/bin/bash : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- ディレクトリ=$1″ : この行は、最初のコマンドライン引数を変数ディレクトリに割り当てます。
- if [ -z $ディレクトリ ];それから : この行は、ディレクトリ変数が空かどうか (スクリプトの実行時に引数が指定されていないかどうか) をチェックします。
- エコーの使用量: $0 : ディレクトリが空の場合、この行はスクリプト名 ($0) を含む使用法メッセージを出力します。
- 出口1 : この行は、エラーが発生したことを示す終了コード 1 でスクリプトを終了します。
- f i: これは最初の if ステートメントの終わりを示します。
- もし [ ! -d $ディレクトリ];それから : この行は、指定されたディレクトリが存在しないかどうかをチェックします (-d はディレクトリをテストします)。
- エコー エラー: 「$directory」は有効なディレクトリではありません。 : 指定されたディレクトリが存在しない場合、この行はエラー メッセージを出力します。
- 出口1 : 終了コード 1 でスクリプトを終了します。
- なれ : 2 番目の if ステートメントの終了をマークします。
- cd $ディレクトリ ||出口1 : 現在の作業ディレクトリを指定したディレクトリに変更します。ディレクトリの変更が失敗した場合 (ディレクトリが存在しないなど)、スクリプトはエラー コードを表示して終了します。
- * 内のファイルの場合;する: 私 * 内のファイルの場合;する: 現在のディレクトリ内のすべての項目を反復するループを開始します (* はすべてのファイル名に一致します)。
- if [ -f $file ];それから : 現在のループ反復項目が通常のファイルかどうかを確認します (-f は通常のファイルをテストします)。
- newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : tr コマンドを使用して現在のファイル名 ($file) を小文字に変換し、結果を newname 変数に保存します。
- [ $file != $newname ] && mv $file $newname : 元のファイル名と新しい小文字のファイル名を比較します。異なる場合は、mv コマンドを使用してファイルの名前を変更します。
- なれ : 内部の if ステートメントの終わりをマークします。
- 終わり : ループの終了をマークします。
注記 : スクリプトを実行するときに引数としてディレクトリを指定する必要があります。ここでは、現在のディレクトリ home/jayeshkumar/test のパスを使用しました。
27) シェルスクリプト内で算術演算を使用するにはどうすればよいですか?
算術演算は、さまざまな組み込みメソッドを使用してシェル スクリプト内で実行できます。シェルは、算術拡張を使用した単純な算術計算のメカニズムを提供します。次のようなものです。
- 算術展開 ($((…)))
- expr コマンドの使用
- letコマンドの使用
以下は、算術演算の 3 つの方法すべてを説明するシェル スクリプトです。
#!/bin/bash
数値1=10
数値2=5#算術展開 ($((…)))
結果=$((num1 + num2))
エコー合計: $result#expr コマンドの使用
sum=$(expr $num1 + $num2)
エコー合計: $sum#letコマンドの使用
合計 = num1 + num2 とします
エコー合計: $sum説明:
- `#!/bin/bash` : これは、Bash シェルを使用してスクリプトを解釈する必要があることを指定するシバンです。
- `num1=10` そして「」 num2=5` : これらの行は、値 10 と 5 を変数 ` に割り当てます。 番号1 ` と ` 番号2 `、それぞれ。
- `#算術展開 ($((…)))` : これは、算術展開を示すセクションの開始を示すコメントです。
- `結果=$((num1 + num2))` : この行は算術展開を使用して ` の合計を計算します。 番号1 ` と ` 番号2 ` そして結果を ` に保存します 結果 ` 変数。
- `エコー合計: $result` : この行は、` に格納されている値を使用して計算された合計を出力します。 結果 ` 変数。
- `#expr コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 式 ` 算術演算用のコマンド。
- `sum=$(expr $num1 + $num2)` : この行では ` が使用されています 式 ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に保存します 和 ` 変数。 ` 式 ` コマンドでは演算子の前後にスペースが必要です。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
- `#let コマンドの使用` : これは、` の使用方法を示すセクションの開始を示すコメントです。 させて ` 算術演算用のコマンド。
- `let sum = num1 + num2''` : この行では ` が使用されています させて ` の合計を計算するコマンド 番号1 ` と ` 番号2 ` そして結果を ` に代入します 和 ` 変数。 ` させて ` コマンドでは演算子の前後にスペースを入れる必要はありません。
- `エコー合計: $sum` : この行は、` に格納されている値を使用して計算された合計を出力します。 和 ` 変数。
算術
28) ネットワーク ホストが到達可能かどうかを確認するスクリプトを作成します。
以下は、ping コマンドを使用してネットワーク ホストが到達可能かどうかを確認する単純なシェル スクリプトです。
#!/bin/bash
ホスト=$1''
if [ -z $host ];それから
エコーの使用量: $0
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。
最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。
要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。
出口1
なれ
ping -c 4 $host
もし[$? -eq 0 ];それから
echo $host に到達可能です。
それ以外
echo $host に到達できません。
なれ
説明:
- ホスト名または IP アドレスを引数として受け取り、その引数が指定されているかどうかを確認します。
- 引数が指定されていない場合、使用方法のメッセージが表示されて終了します。
- -c 4 オプションを指定した ping コマンドを使用して、指定されたホストに 4 つの ICMP エコー要求を送信します。
- ping コマンドの実行後、終了ステータス ($?) がチェックされます。終了ステータスが 0 の場合は、ホストに到達可能であることを意味し、スクリプトは成功メッセージを出力します。それ以外の場合は、失敗メッセージが出力されます。
注記 : スクリプトを実行するときに引数としてホスト名を指定する必要があります。ここでは google.com を使用しました
29) 配列内の最大の要素を見つけるシェル スクリプトを作成します。
これは、配列内の最大の要素を見つけるためのシェル スクリプトです。
#!/bin/bash
# 配列を宣言する
配列=(3 56 24 89 67)# 最初の要素から最大値を格納する変数を初期化します
max=${配列[0]}
# 配列を反復処理する
${array[@]} の num に対して;する
# 各要素を現在の最大値と比較します
if ((数値> 最大値));それから
最大=$num
なれ
終わり# 最大値を出力します
echo 配列内の最大要素は $max です。
説明:
- ` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
- ` 配列=(3 56 24 89 67) `: 配列は宣言され、値で初期化されます。
- ` max=${配列[0]} `: `max` は配列の最初の要素で初期化されます。
- ` ${array[@]} の num に対して;する `: `for` ループは、配列の要素を反復処理するために使用されます。
- ` if ((数値> 最大値));それから `: `if` ステートメントは、現在の要素 `num` が現在の最大値 `max` より大きいかどうかをチェックします。
- ` max=$num`: If`num ` が `max` より大きい場合、`max` は num の値で更新されます。
- ` 終わり `: `for` ループが閉じられます。
- ` echo 配列内の最大要素は $max です。 `: 最後に、スクリプトは配列内で見つかった最大値を出力します。

最大の数
30) 配列内の要素の合計を計算するスクリプトを作成します。
#!/bin/bash
# 配列を宣言する
配列=(1 65 22 19 94)
# 合計を格納する変数を初期化します
合計=0
# 配列を反復処理し、各要素を合計に加算します
${array[@]} の num に対して;する
午前=$((午前 + 午前))
終わり# 合計を出力します
echo 配列内の要素の合計は次のとおりです: $sum
説明:
` #!/bin/bash `: シバン行は、Bash シェルを使用してスクリプトを解釈する必要があることを指定します。
` 配列=(1 65 22 19 94) `: 配列は宣言され、値で初期化されます。
` 合計=0 `:` 和 ` は要素の合計を保持するために 0 に初期化されます。
` ${array[@]} の num に対して;する `:あ` のために ` ループは、配列の要素を反復処理するために使用されます。
` 午前=$((午前 + 午前)) `: ループ内の各要素 ` 1つで `に`が追加されます 和 ` 変数。
` 終わり `: ` のために ` ループが閉じられます。
`echo 配列内の要素の合計は次のとおりです: $sum`: 最後に、スクリプトは配列内のすべての要素の合計を出力します。

要素の合計
シェルスクリプトについて詳しく知る
- シェルとカーネルの違い
- バインドシェルとリバースシェルの違い
- Linux シェルとシェル スクリプトの概要
結論
私たちオタクは皆、シェル スクリプトが作業の生産性を向上させるだけでなく、時間の節約にも非常に役立つことを知っています。そこで、この記事では、 30 個の非常に便利な conman シェル スクリプトの例 。シェル スクリプトの例に関するこの完全なガイドが、シェル スクリプトのすべてを理解するのに役立つことを願っています。