GNU/Linux >> Linux の 問題 >  >> Linux

初心者向けのシェルスクリプト–LinuxでBashスクリプトを作成する方法

シェルスクリプトは、Linuxのプロセス自動化の重要な部分です。スクリプトは、一連のコマンドをファイルに書き込んでから実行するのに役立ちます。

これにより、特定のコマンドを何度も作成する必要がなくなるため、時間を節約できます。毎日のタスクを効率的に実行でき、自動実行のスケジュールを設定することもできます。

新しいセッションの起動時に特定のメッセージを表示したり、特定の環境変数を設定したりするなど、起動時に実行する特定のスクリプトを設定することもできます。

スクリプトのアプリケーションと使用法はたくさんあるので、詳しく見ていきましょう。

この記事では、次のことを学びます。

  1. bashシェルとは何ですか?
  2. bashスクリプトとは何ですか?どのように識別しますか?
  3. 最初のbashスクリプトを作成して実行する方法。
  4. シェルスクリプトの基本的な構文。
  5. システムのスケジュールされたスクリプトを確認する方法。
  6. cronジョブを介してスケジュールすることでスクリプトを自動化する方法。

学ぶための最良の方法は練習することです。 Replitを使用してフォローすることを強くお勧めします。実行中のLinuxシェルに数分以内にアクセスできます。

Bashシェルの概要

Linuxコマンドラインは、シェルと呼ばれるプログラムによって提供されます。何年にもわたって、シェルプログラムはさまざまなオプションに対応するように進化してきました。

さまざまなユーザーがさまざまなシェルを使用するように構成できます。ただし、ほとんどのユーザーは、現在のデフォルトのシェルを使用することを好みます。多くのLinuxディストリビューションのデフォルトのシェルは、GNU Bourne-Again Shell(bash)です。 BashはBourneシェル( sh )に引き継がれます 。

シェルを最初に起動すると、 .bashrcにある起動スクリプトが使用されます。 または.bash_profile シェルの動作をカスタマイズできるファイル。

シェルをインタラクティブに使用すると、 $が表示されます ユーザーからのコマンドを待っているとき。これはシェルプロンプトと呼ばれます。

[username @ host〜] $

シェルがrootとして実行されている場合、プロンプトはに変更されます 。スーパーユーザーシェルプロンプトは次のようになります:

[root @ host〜]#

Bashは、GUIで効率的に実行するのが難しい特定の操作を単純化できるため、非常に強力です。ほとんどのサーバーにはGUIがないことを忘れないでください。コマンドラインインターフェイス(CLI)の機能の使い方を学ぶのが最善です。

Bashスクリプトとは何ですか?

bashスクリプトは、ファイルに書き込まれる一連のコマンドです。これらは、bashプログラムによって読み取られて実行されます。プログラムは行ごとに実行されます。

たとえば、コマンドラインを使用して、特定のパスに移動し、フォルダーを作成して、その中にプロセスを生成できます。

コマンドをbashスクリプトに保存して実行することにより、同じ一連の手順を実行できます。スクリプトは何度でも実行できます。

Bashスクリプトをどのように識別しますか?

.shのファイル拡張子 。

命名規則により、bashスクリプトは .shで終わります。 。ただし、bashスクリプトは、 shがなくても完全に正常に実行できます。 拡大。

スクリプトはbashbangで始まります。

スクリプトもshebangで識別されます 。シバンはbash#の組み合わせです およびbang! bashシェルパスをたどりました。これはスクリプトの最初の行です。 Shebangは、bashシェルを介して実行するようにシェルに指示します。 Shebangは、bashインタープリターへの絶対的な道です。

以下は、シェバンステートメントの例です。

#! /bin/bash

bashプログラムのパスはさまざまです。後でそれを識別する方法を説明します。

実行権

スクリプトには、スクリプトを実行するユーザーに対する実行権限があります。

実行権はxで表されます 。以下の例では、私のユーザーは rwxを持っています (読み取り、書き込み、実行)ファイル test_script.shの権限

ファイルの色

実行可能スクリプトは、他のファイルやフォルダとは異なる色で表示されます。

私の場合、実行権限のあるスクリプトは緑色で表示されます。

最初のBashスクリプトを作成する方法

Hello Worldを出力するbashで簡単なスクリプトを作成しましょう 。

hello_world.shという名前のファイルを作成します

touch hello_world.sh

bashシェルへのパスを見つけます。

which bash

私の場合、パスは / usr / bin / bashです。 これをシェバンに含めます。

コマンドを記述します。

echo コンソールへの「HelloWorld」。

スクリプトは次のようになります:

#! usr/bin/bash
echo "Hello World"

ファイルhello_world.shを編集します 選択したテキストエディタを使用して、上記の行を追加します。

ユーザーに実行権限を提供します。

次のコマンドを使用して、ファイルのアクセス許可を変更し、スクリプトの実行を許可します。

chmod u+x hello_world.sh

chmod 特定のユーザーのファイルの既存の権限を変更します。 + xを追加します ユーザーuへ 。

スクリプトを実行します。

スクリプトは次の方法で実行できます。

./ hello_world.sh

bash hello_world.sh

出力は次のとおりです:

Bashスクリプティングの基本構文

他のプログラミング言語と同様に、bashスクリプトは一連のルールに従って、コンピューターが理解できるプログラムを作成します。このセクションでは、bashスクリプトの構文について学習します。

変数を定義する方法

構文variable_name=value を使用して、変数を定義できます。 。変数の値を取得するには、 $を追加します 変数の前。

#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name

タックスは、Linuxのマスコットであるペンギンの名前でもあります。

算術式

以下は、数学計算のためにbashでサポートされている演算子です。

オペレーター 使用法
+ 追加
- 減算
* 乗算
/ 分割
** べき乗
モジュラス

いくつかの例を実行してみましょう。

以下の構文を使用して、数式を計算して変数に格納することもできます。

var =$((expression))

例を試してみましょう。

#!/bin/bash

var=$((3+9))
echo $var

上記の方法を使用して分数が正しく計算されず、切り捨てられます。

10進計算の場合 、 bcを使用できます 出力を特定の小数点以下の桁数にするコマンド。 bc (Bash Calculator)は、特定の小数点以下の計算をサポートするコマンドライン計算機です。

echo "scale =2; 22/7" | bc

scale 出力に必要な小数点以下の桁数を定義します。

ユーザー入力の読み方

場合によっては、ユーザー入力を収集して関連する操作を実行する必要があります。

bashでは、 readを使用してユーザー入力を受け取ることができます コマンド。

read variable_name

カスタムメッセージでユーザーにプロンプ​​トを表示するには、 -pを使用します フラグ。

read -p "Enter your age" variable_name

例:

#!/bin/bash

echo "Enter a numner"
read a

echo "Enter a numner"
read b

var=$((a+b))
echo $var
数値比較論理演算子

比較は、ステートメントが trueと評価されるかどうかを確認するために使用されます またはfalse 。以下に示す演算子を使用して、2つのステートメントを比較できます。

操作 構文 説明
平等 num1 -eq num2 はnum1はnum2と同じです
以上 num1 -ge num2 はnum1がnum2よりも大きい
より大きい num1 -gt num2 はnum1がnum2より大きい
以下 num1 -le num2 はnum1がnum2よりも小さい
未満 num1 -lt num2 はnum1がnum2よりも小さい
等しくない num1 -ne num2 はnum1がnum2と等しくない

構文

if [ conditions ]
    then
         commands
fi

2つの数値を比較して、それらの関係を見つけましょう:

read x
read y

if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi

出力:

条件付きステートメント(意思決定)

条件は、ブール式( true に評価される式)です。 またはfalse )。条件を確認するには、 ifを使用できます 、 if-else if-elif-else ネストされた条件。

条件文の構造は次のとおりです。

  • if ... then ... fi ステートメント
  • if ... then ... else ... fi ステートメント
  • if..elif..else..fi
  • if..then..else..if..then..fi..fi .. (ネストされた条件文)

構文

if [[ condition ]]
then
	statement
elif [[ condition ]]; then
	statement 
else
	do this by default
fi

意味のある比較を作成するには、AND -aを使用できます。 およびまたは-o 同様に。

次のステートメントは次のように解釈されます。Ifa 40より大きくb 6未満です。

if [$ a -gt 40 -a $ b -lt 6]

:辺の長さを読んで三角形のタイプを見つけましょう。

read a
read b
read c

if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL

elif [ $a == $b -o $b == $c -o $a == $c ]
then 
echo ISOSCELES
else
echo SCALENE

fi

出力

テストケース#1

テストケース#2

テストケース#3

ループとスキップ

forループを使用すると、ステートメントを特定の回数実行できます。

数字でループする:

以下の例では、ループは5回繰り返されます。

#!/bin/bash

for i in {1..5}
do
    echo $i
done

文字列でループする:

文字列をループすることもできます。

#!/bin/bash

for X in cyan magenta yellow  
do
	echo $X
done
Whileループ

whileループは条件をチェックし、条件が trueのままになるまでループします 。ループの実行を制御するためにカウンターをインクリメントするcounterステートメントを提供する必要があります。

以下の例では、((i + =1)) iの値をインクリメントするcounterステートメントです 。

例:

#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
  (( i += 1 ))
done
ファイルの読み取り

ファイルsample_file.txtがあるとします。 以下に示すように:

ファイルを1行ずつ読み取り、出力を画面に印刷できます。

#!/bin/bash

LINE=1

while read -r CURRENT_LINE
	do
		echo "$LINE: $CURRENT_LINE"
    ((LINE++))
done < "sample_file.txt"

出力:

バックティックを使用してコマンドを実行する方法

複雑なコマンドの出力をスクリプトに含める必要がある場合は、バックティック内にステートメントを記述できます。

構文:

var=`コマンド `

tmpfsを使用してマウントポイントのリストの出力を取得するとします。 彼らの名前で。次のようなステートメントを作成できます。df-h | grep tmpfs

これをbashスクリプトに含めるために、バックティックで囲むことができます。

#!/bin/bash

var=`df -h | grep tmpfs`
echo $var

出力:

コマンドラインからスクリプトの引数を取得する方法

実行時にスクリプトに引数を与えることができます。

$ @ 1から始まるパラメータの位置を表します。

#!/bin/bash

for x in $@
do
    echo "Entered arg is $x"
done

次のように実行します:

./ script arg1 arg2

cronジョブを介してスケジュールすることでスクリプトを自動化する方法

Cronは、Unixライクなシステムに存在するジョブスケジューリングユーティリティです。毎日、毎週、毎月、または1日の特定の時間に実行するようにジョブをスケジュールできます。 Linuxでの自動化は、cronジョブに大きく依存しています。

cronをスケジュールするための構文は次のとおりです。

# Cron job example
* * * * * sh /path/to/script.sh

ここでは、 * 表現は、それぞれ分、時間、日、月、平日を表します。

以下は、cronジョブのスケジューリングの例です。

SCHEDULE スケジュールされた値
5 0 * 8 * 8月の00:05。
5 4 * * 6 日曜日の04:05。
0 22 * * 1-5 月曜日から金曜日までの毎日22:00。

cronについて詳しくは、このブログ投稿をご覧ください。

システム内の既存のスクリプトをチェックする方法

crontabの使用

crontab -l <​​/ code> 特定のユーザーに対してすでにスケジュールされているスクリプトを一覧表示します。

検索コマンドの使用

find コマンドは、特定のパターンに基づいてファイルを見つけるのに役立ちます。ほとんどのスクリプトは.shで終わるため 、次のような検索スクリプトを使用できます:

find . -type f -name "*.sh"

どこで、

  • 現在のディレクトリを表します。それに応じてパスを変更できます。
  • -タイプf 探しているファイルタイプがテキストベースのファイルであることを示します。
  • *。sh .shで終わるすべてのファイルに一致するように指示します 。

findコマンドについて詳しく知りたい場合は、他の投稿を確認してください。

まとめ

このチュートリアルでは、シェルスクリプトの基本を学びました。意味のあるプログラムを書くのに役立つ例と構文を調べました。

このチュートリアルから学んだお気に入りのことは何ですか? Twitterで教えてください!

私の他の投稿はここで読むことができます。

macrovectorによって作成された作業ベクトル-www.freepik.com


Linux
  1. シェルスクリプトのPosixコンプライアンスをテストする方法は?

  2. Bashシェルスクリプトで改行をエコーする方法

  3. Linux bash/シェルで画像をbase64エンコードする方法

  1. Linuxスクリプト:Bashでのwhileループの3つのハウツー

  2. LSB Init 標準に基づいて Linux Init スクリプトを作成する方法

  3. Linux はシェル スクリプトをどのように処理しますか?

  1. Linuxでシェルスクリプトを使用してJsonを解析する方法は?

  2. Bashシェルスクリプトで文字列を比較する方法

  3. Linux シェル スクリプト用の 12 の Bash for ループの例