Bashシェルスクリプトの概要

Bashシェルのスクリプトの詳細な概要

シェルスクリプトは、コンピューターで定期的に実行するタスクを自動化するための強力な方法です。

このチュートリアルでは、シェルスクリプトの概要を説明し、実用的なシェルスクリプトの作成に関するより詳細で高度なチュートリアルの基本リファレンスになります。

私をチェックしてくださいBashの紹介役職。

Bashは、小さなプログラムを作成するためにまとめて使用できる一連のコマンドを提供します。これは、慣例によりスクリプトと呼ばれます。

違いに注意してください。 BashプログラミングではなくBashスクリプトと言い、Bashスクリプトを「Bashプログラム」とは呼びません。これは、スクリプトが手に負えなくなったと感じる前に、通常、ある程度の複雑さに達する可能性があるためです。

しかし、Bashスクリプトを実行するのにBash以外のものは必要ないので、Bashスクリプトは素晴らしいです。コンパイラもインタプリタも、シェルだけです。

Perl、JavaScript、Pythonなどのプログラミング言語には見逃してしまうことがたくさんあります。

変数にはスコープがなく、すべてグローバルであり、標準ライブラリがなく、たとえばモジュールシステムがありません。しかし、その利点は非常に優れています。シェルの場合と同じように、任意のCLIツールを非常に簡単に呼び出すことができます。また、多くの小さなユーティリティコマンドを使用するUnixのアプローチにより、シェルスクリプトが非常に優れています。でネットワークリクエストを実行するwget、を使用してテキストを処理するawk、 もっと。

シェルスクリプトは、知っておくとよいツールの1つであり、少なくともプログラムを見たときにその読み方を知っていることと、プログラムが日常業務にもたらすメリットを知っています。

このチュートリアルでは、Bashスクリプトの理論と概念について説明します。将来的には、特定のテクニックや特定の問題を解決する方法について、より詳細なチュートリアルを投稿します。

基本

スクリプトはファイルに保存されます。シェルスクリプトには任意の名前と拡張子を付けることができますが、それは問題ではありません。重要なことは、最初の行の「シバン」で始まらなければならないということです。

#!/bin/bash

そしてそれは実行可能ファイルでなければなりません。

ファイルはを使用して実行可能ファイルとして設定されますchmod、ユーティリティコマンド。

次のように使用できます。

chmod u+x myscript

作るためにmyscriptユーザー用に実行可能なファイル(ここではパーミッションのうさぎの穴には入りませんが、すぐに説明します)。

これで、同じフォルダーにいる場合は、スクリプトを呼び出すことでスクリプトを実行できます。./myscript、またはそれへのフルパスを使用します。

学習している間、可能であれば、オンラインの遊び場を使用することをお勧めしますこのように、テストが簡単になります。

コメント

コメントは、プログラムを作成するときに最も重要なことの1つです。で始まる行#記号はコメントです(上記のシバンラインを除く)。

#!/bin/bash
# this is a comment

コメントは行末から始めることもできます。

#!/bin/bash
echo ok # this is a comment

変数

を使用して変数を設定できます=オペレーター:

name=value

例:

ROOM_NUMBER=237
name=Flavio
nickname="Flavio"

を使用して変数を出力できますecho組み込みコマンドと先頭に$var名に:

echo $ROOM_NUMBER
echo $name

演算子

Bashは、プログラミング言語全体で一般的に使用されるいくつかの算術演算子を実装しています。

  • +追加
  • -減算
  • *かける
  • /除算
  • %モジュロ(除算の剰余)
  • **べき乗

を使用して値を比較できます

  • <
  • <=
  • ==
  • >=
  • >

次の比較演算子を使用することもできます。

  • -ltより低い
  • -gtより大きい
  • -le以下以下
  • -ge以上
  • -eqに等しい
  • -ne等しくない

この方法では:

#!/bin/bash
age=23
minimum=18
if test $age -lt $minimum
then
  echo "Not old enough"
fi

論理演算子:

  • &&論理積
  • ||論理OR

これらのショートカットを使用すると、算術演算を実行してから割り当てを実行できます。

  • +=
  • -=
  • *=
  • /=
  • %=

他にもいくつかの演算子がありますが、それらが最も一般的な演算子です。

を使用して画面に何でも印刷できますechoコマンド:

#!/bin/bash
echo "test"
echo test
echo testing something

論理条件

AND:評価して0(ゼロ)両方の場合commandそしてanothercommand実行して返す0。シェルコマンドでゼロを返すことは、コマンドが成功したことを意味します。エラーメッセージは、ゼロ以外の戻り値で識別されます。

command && anothercommand

または:評価して0(ゼロ)少なくとも1つがcommandそしてanothercommand実行して返す0

command || anothercommand

NOT:の論理戻り値を反転しますcommand

! command

制御構造

で、使い慣れている可能性のあるいくつかの制御構造を使用できます。

If / elseステートメント

シンプルif

if condition
then
  command
fi

ifその後else

if condition
then
  command
else
  anothercommand
fi

ネストif-そして-else

if condition
then
  command
elif
  anothercommand
else
  yetanothercommand
fi

あなたは保つことができますelseセミコロンを使用して同じ行に:

if condition ; then
  command
fi

例:

#!/bin/bash
DOGNAME=Roger
if [ "$DOGNAME" == "" ]; then
  echo "Not a valid dog name!"
else
  echo "Your dog name is $DOGNAME"
fi

角かっこに注意してください。ブール式の評価を行う必要がある場合は、角かっこを追加する必要があります。

ループ

whileループ

一方condition真の値に解決し、実行しますcommand

while condition
do
  command
done

まで

までcondition真の値に解決し、実行しますcommand

until condition
do
  command
done

のために

リストを繰り返し、アイテムごとにコマンドを実行します

for item in list
do
  command
done

中断して続行

ループ内では、breakそしてcontinueループを完全に中断するステートメント、または現在の反復をスキップするステートメント。

場合

ケースコントロール構造では、値に応じてさまざまなルートを選択できます。

case value in
  a)
    command
    #...
    ;;
  b)
    command
    #...
    ;;
esac

のようにfiesacケース構造を終了し、お気づきのようにcase逆さまにつづる。

各ケースの後にダブルセミコロンを追加します。

A*)caseは、明示的に表現されていないすべてのケースを処理します。を使って|シンボルあなたは単一のケースのために複数の選択肢を表現することができます。

例:

#!/bin/bash
read -p "How many shoes do you have?" value
case $value in
  0|1)
    echo "Not enough shoes! You can't walk"
    ;;
  2)
    echo "Awesome! Go walk!"
    #...
    ;;
  *)
    echo "You got more shoes than you need"
    #...
    ;;
esac

選択する

Aselect構造は、ユーザーが選択できるメニューを示しています。

select item in list
do
  command
done

例:

#!/bin/bash
select breed in husky setter "border collie" chiwawa STOP
do
  if [ "$breed" == "" ]; then
    echo Please choose one;
  else
    break
  fi
done

echo “You chose $breed

試験条件

私はこの用語を使用しましたcondition上記の制御構造で。

あなたは使用することができますtest条件をチェックしてtrueを返すBash組み込みコマンド(0)またはfalse値(0)。

次に例を示します。

#!/bin/bash
if test "apples" == "apples"
then
  echo Apples are apples
fi

if ! test “apples” == “oranges” then echo Apples are not oranges fi

コマンドラインからの入力の読み取り

を使用してスクリプトをインタラクティブにすることができますread組み込みコマンド。このコマンドは、標準入力から1行を読み取り、非常に柔軟な方法で入力をフォーマットできます。

最も簡単な使用法は次のとおりです。

echo "Age:"
read age

これにより「Age:」が出力され、番号を入力してEnterキーを押すと、その番号がに割り当てられます。age変数。

ザ・-pのオプションread組み込みのプロンプトを提供し、入力をage変数:

read -p "Age: " age

ザ・readコマンドにはさらに多くのオプションがあり、入力して調べることができますhelp readBashで。

オプションの追加

オプションは、次のように、ハイフンとそれに続く文字を使用して指定します。

ls -a
driveCar -b "Ford"

コードでは、組み込みコマンドを使用しますgetoptsオプションを解析して値を取得します。

オプションを受け入れる場合aそしてb、私たちは餌をやりますgetopts abwhileループに。

オプションの場合b値を受け入れ、コロンを追加します:その後、フォーマットしますgetoptsこのように呼び出す:getopts ab: arg

スニペットは次のとおりです。

while getopts xy: arg
do
  case $arg in
    x) echo "Option $arg enabled" ;;
    y) echo "The value of $arg is $OPTARG" ;;
    esac
done

このスクリプトでは、$OPTARGオプション文字が自動的に割り当てられます。教えますgetoptsどのオプションを受け入れるか、それぞれのケースを個別に処理します。

エラーはによって自動的に処理されますgetopts。コロンを前に付けることで、エラーメッセージを自分で処理することを選択できます:引数定義の前:getopts :xy: arg

次に、\?そして:ケース。 1つ目は、無効なオプションを渡したときに呼び出され、2つ目は、オプションを見逃したときに呼び出されます。

while getopts :xy: arg
do
  case $arg in
    x) echo "Option $arg enabled" ;;
    y) echo "The value of $arg is $OPTARG" ;;
    :) echo "$0: Must supply an argument to -$OPTARG." >&2
       exit 1 ;;
    \?) echo "Invalid option -$OPTARG ignored." >&2 ;;
    esac
done

引数を追加し忘れた場合、エラーメッセージは異なります。

パラメータの操作

スクリプト内では、呼び出し時に渡された任意のパラメーターにアクセスできます。あなたはそれらにアクセスします$0$1$2など、位置に応じて、どこで$0はコマンドの名前であり、番号をインクリメントすると、パラメーターの位置がインクリメントされます。位置9の後に、中括弧が必要です。${10}${11}

たとえば、これを実行しますstartCar脚本:

#!/bin/bash
echo $0
echo $1

なので./startCar fiesta印刷します

./startCar
fiesta

特別な$*構文はすべてのパラメーターを出力し、$#渡されたパラメーターの数:

#!/bin/bash
echo $# $*
./test.sh Milan Florence Rome
3 Milan Florence Rome

オプションをパラメータから分離する

オプションとパラメータの両方がある場合は、それらを分離する必要があります。これはハイフンで行います。

driveCar -m "Ford Fiesta" - Milan Florence Rome

文字列の操作

与えられた文字列:

dogname="Roger"

あなたはその長さを使用して取得することができます${#dogname}

Bashが文字列内の特殊文字を解釈しないように、文字列を操作するときは常に文字列を引用符で囲みます。

を使用して2つの文字列を比較できます=または==演算子、それは同じです:

"$dogname" = "$anotherdogname"
"$dogname" == "$anotherdogname"

周囲のスペースのため、割り当てではありません=

不平等をチェックすることもできます。

"$dogname" != "$anotherdogname"

配列

配列は、括弧内に宣言された項目のリストです。

breeds=(husky setter "border collie" chiwawa)

角括弧を使用して、配列内の任意のアイテムを参照できます。

breeds[0]
breeds[1]

そして、この特別な構文を使用して、アイテムの総数を取得できます。

${#breeds[@]}

組み込みコマンド

これまでに、次のようないくつかの組み込みコマンドを見てきました。

  • test
  • read
  • echo

Bashにはそれらがいくつかあります。あなたは電話することによってそれらすべてを見ることができますhelp次に、たとえばを使用して各コマンドのヘルプを見つけることができますhelp read

機能

JavaScriptや他のプログラミング言語と同じように、再利用可能な小さなコードを作成し、名前を付けて、必要なときに呼び出すことができます。

Bashはそれらを呼び出します機能

関数を定義するには

function name {

}

例:

function cleanFolder {

}

そして、あなたはそれを次のように呼び出します:

cleanFolder

宣言する必要なしに、パラメータをフォルダに渡すことができます-あなたはそれらを次のように参照するだけです$1$2など。スクリプトパラメータの場合と同じように:

function cleanFolder {
  echo "Clean folder $1"
}
cleanFolder "/Users/flavio/Desktop"

私の無料ダウンロードLinuxコマンドハンドブック


その他のCLIチュートリアル: