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

シェルスクリプトのステップバイステップチュートリアル

このチュートリアルでは、シェルスクリプトと、最初のシェルスクリプトを作成する方法について説明します。これらは一般にシェルスクリプトと呼ばれますが、他のLinuxシェルの中でBashを使用するため、これらをBashスクリプトと呼びます。

zsh、tcsh、ksh、およびその他のシェルがあります。

以前の投稿では、Bashシェルの使用方法とLinuxコマンドの使用方法を見てきました。

Bashスクリプトの概念は、一連のコマンドを実行して作業を完了することです。

シェルから1つのステップで複数のコマンドを実行するには、コマンドを1行で入力し、セミコロンで区切ることができます。

pwd ; whoami

これはBashスクリプトです!!

pwdコマンドが最初に実行され、現在の作業ディレクトリが表示されます。次に、whoamiコマンドが実行され、現在ログインしているユーザーが表示されます。

複数のコマンドを好きなだけ実行できますが、制限があります。このコマンドを使用して、最大引数を決定できます。

 getconf ARG_MAX

さて、コマンドをファイルに入れるのはどうですか。これらのコマンドを実行する必要がある場合は、そのファイルのみを実行します。これはBashスクリプトと呼ばれます。

まず、touchコマンドを使用して新しいファイルを作成します。 Linuxには多くのシェルがあるため、Bashスクリプトの最初に、使用するシェルを定義する必要があります。Bashシェルはその1つです。

シェルスクリプトシバン

Bashスクリプトを作成するときに最初に入力する行は、(#!)の後に使用するシェルです。

#! <===この標識はシバンと呼ばれます。

#!/bin/bash

シェルスクリプトの行の前にポンド記号(#)を使用すると、この行はコメントになり、処理されないことを意味しますが、上記の行は特殊なケースです。この行は、使用するシェル(この場合はBashシェル)を定義します。

シェルコマンドは、次のように1行に1つずつ入力されます。

#!/bin/bash

# This is a comment

pwd

whoami

同じ行に複数のコマンドを入力できますが、セミコロンで区切る必要がありますが、コマンドは別々の行に書き込むことをお勧めします。これにより、後で読みやすくなります。

スクリプト権限を設定する

シェルスクリプトを作成したら、ファイルを保存します。

次に、そのファイルを実行可能に設定します。それ以外の場合は、許可が拒否されます。 chmodコマンドを使用して権限を設定する方法を確認できます。

chmod +x ./myscript

次に、シェルに入力するだけで実行してみてください:

./myscript

はい、実行されます。

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

他の投稿からわかるように、テキストの印刷は

を使用していません
echo

コマンド。

ファイルを編集して、次のように入力します:

#!/bin/bash

# our comment is here

echo "The current directory is:"

pwd

echo "The user logged in is:"

whoami

出力を見てください:

完全!これで、コマンドを実行してテキストを表示できます:

echo

echoコマンドやファイルの編集方法がわからない場合は、基本的なLinuxコマンドに関する以前の記事を参照することをお勧めします。

変数の使用

変数を使用すると、スクリプトで使用するための情報を保存できます。

シェルスクリプトでは、次の2種類の変数を定義できます。

  • 環境変数
  • ユーザー変数

環境変数

システム変数を操作する必要がある場合があります。これは、環境変数を使用して行うことができます。

#!/bin/bash

# display user home

echo "Home for the current user is: $HOME"

$ HOMEシステム変数を二重引用符で囲み、ホーム変数を正しく出力することに注意してください。

ドル記号自体を印刷したい場合はどうなりますか?

echo "I have $1 in my pocket"

変数$1が存在しないため、機能しません。では、それをどのように克服するのでしょうか?

次のように、ドル記号の前のバックスラッシュ\であるエスケープ文字を使用できます。

echo "I have \$1 in my pocket"

今では動作します!!

ユーザー変数

また、スクリプトでカスタム変数を設定して使用することもできます。

これと同じ方法でユーザー変数を呼び出すことができます:

#!/bin/bash

# User variables

grade=5

person="Adam"

echo "$person is a good boy, he is in grade $grade"

chmod +x myscript

./myscript

コマンド置換

コマンド置換を使用して、コマンドの結果から情報を抽出できます。

次のいずれかの方法でコマンド置換を実行できます。

  • バッククォート文字( `)。
  • $()形式。

バッククォート文字を入力するときは、一重引用符ではないことを確認してください。

次のように、コマンドを2つのバッククォートで囲む必要があります。

mydir=`pwd`

またはその逆:

mydir=$(pwd)

したがって、スクリプトは次のようになります。

#!/bin/bash

mydir=$(pwd)

echo $mydir

コマンドの出力をmydir変数に保存できます。

数学の計算

$((2 + 2))形式を使用して基本的な数学計算を実行できます:

#!/bin/bash

var1=$(( 5 + 5 ))

echo $var1

var2=$(( $var1 * 2 ))

echo $var2

とても簡単です。

if-thenステートメント

シェルスクリプトには条件文が必要です。値が10より小さい場合のように、それ以外の場合はこれを行います。好きなロジックを想像できます。

if-thenステートメントの最も基本的な構造は次のとおりです。

コマンドの場合;次に

何かをする

fi

次に例を示します:

#!/bin/bash

if whoami; then

	echo "It works"

fi

whoami

条件がtrueを返すようにユーザーを返し、メッセージを出力します。

もっと深く掘り下げて、私たちが知っている他のコマンドを使用しましょう。

ユーザーが存在するかどうかを確認します

ユーザーのファイルで特定のユーザーを検索している可能性があります

/etc/passwd

レコードが存在する場合は、メッセージで教えてください。

#!/bin/bash

user=likegeeks

if grep $user /etc/passwd; then

	echo "No such a user $user"

fi
をエコーし​​ます。

を使用します
/etc/passwd

ファイル。 grepコマンドに関するチュートリアルを確認できます。

ユーザーが存在する場合、シェルスクリプトはメッセージを出力します。

ユーザーが存在しない場合はどうなりますか?スクリプトは、ユーザーが存在しないことを通知せずに実行を終了します。 OK、スクリプトをさらに改善しましょう。

if-then-elseステートメント

if-then-elseステートメントは次の構造を取ります:

コマンドの場合;次に

何かをする

その他

別のことをする

fi

最初のコマンドが実行されてゼロが返された場合、つまり成功した場合、elseステートメントの後にコマンドがヒットすることはありません。それ以外の場合、ifステートメントがゼロ以外を返す場合。これは、ステートメント条件が失敗することを意味します。この場合、シェルはelseステートメントの後にコマンドをヒットします。

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

else

	echo "The user $user doesn’t exist"

fi

私たちは今まで順調に進んでいます、動き続けてください。

では、elseステートメントがもっと必要な場合はどうでしょうか。

それは簡単です。次のようなifステートメントをネストすることでそれを実現できます:

条件1の場合;次に

コマンド

elif condition2;次に

コマンド

fi

最初のコマンドがゼロを返す場合。成功を意味します。それ以降はコマンドを実行します。2番目のコマンドがゼロを返す場合はその後のコマンドを実行します。それ以外の場合はいずれもゼロを返さない場合は最後のコマンドのみを実行します。

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

elif ls /home; then

	echo "The user doesn’t exist"

fi
をエコーし​​ます。

任意のシナリオを想像できます。ユーザーが存在しない場合は、

を使用してユーザーを作成します。
useradd

コマンドまたは他のことをします。

テストの組み合わせ

AND(&&)またはOR(||)コマンドを使用して複数のテストを組み合わせることができます。

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] && [ -n $name ]; then

	echo "The name exists and the folder $dir exists."

else

	echo "One test failed"

fi

この例は、両方のテストが成功した場合にのみtrueを返します。そうしないと失敗します。

また、OR(||)も同じように使用できます:

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] || [ -n $name ]; then

	echo "Success!"

else

	echo "Both tests failed"

fi

この例では、一方または両方が成功した場合に成功を返します。

両方が失敗した場合にのみ失敗します。

数値比較

次のような数値比較チェックを使用して、2つの数値間の数値比較を実行できます。

number1 -eqnumber2number1がnumber2と等しいかどうかを確認します。

number1 -genumber2number1がnumber2以上であるかどうかを確認します。

number1 -gtnumber2number1がnumber2より大きいかどうかを確認します。

number1 -lenumber2number1がnumber2以下かどうかを確認します。

number1 -ltnumber2number1がnumber2よりも小さいかどうかを確認します。

number1 -nenumber2number1がnumber2と等しくないかどうかをチェックします。

例として、そのうちの1つを試してみますが、残りは同じです。

示されているように、比較ステートメントは角括弧で囲まれていることに注意してください。

#!/bin/bash

num=11

if [ $num -gt 10]; then

	echo "$num is bigger than 10"

else

	echo "$num is less than 10"

fi

numが10より大きいため、最初のステートメントが実行され、最初のエコーが出力されます。

文字列の比較

次のいずれかの方法で文字列を比較できます。

string1 =string2string1がstring2と同一であるかどうかをチェックします。

string1!=string2string1がstring2と同一でないかどうかをチェックします。

string1

string1>string2string1がstring2より大きいかどうかをチェックします。

-nstring1string1がゼロより長いかどうかをチェックします。

-zstring1string1の長さがゼロかどうかを確認します。

この例に文字列比較を適用できます:

#!/bin/bash

user="likegeeks"

if [ $user = $USER ]; then

	echo "The user $user&nbsp; is the current logged in user"

fi
をエコーし​​ます。

より大きいおよびより小さいに関する1つの注意点 文字列を比較する場合は、必須 バックスラッシュでエスケープする 大なり記号のみを使用すると、間違った結果が表示されるためです。

したがって、次のようにする必要があります:

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

実行されますが、次の警告が表示されます:

./myscript: line 5: [: too many arguments

これを修正するには、$ valsを二重引用符で囲み、次のように1つの文字列のままにします。

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

より大きいおよびより小さいに関する重要な注意事項 文字列の比較用。違いを理解するには、次の例を確認してください。

#!/bin/bash

v1=Likegeeks

v2=likegeeks

if [ $v1 \> $v2 ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

sort myfile

likegeeks

Likegeeks

テスト条件では、小文字が大文字よりも大きいと見なされます。

sort

逆のソートコマンドとは異なります。

テスト条件はASCIIの順序に基づいています。

sort

並べ替えコマンドは、システム設定からの番号付け順序に基づいています。

ファイルの比較

次の演算子を使用して、ファイルを比較および確認できます。

-dmy_fileフォルダかどうかを確認します。

-emy_fileファイルが使用可能かどうかを確認します。

-fmy_fileファイルかどうかを確認します。

-rmy_file読み取り可能かどうかを確認します。

my_file ntmy_file2my_fileが新しいかどうかを確認します my_file2より。

my_file otmy_file2my_fileが古いかどうかを確認します my_file2より。

-Omy_fileファイルの所有者とログに記録されたユーザーが一致するかどうかを確認します。

-Gmy_fileファイルとログに記録されたユーザーが同じグループを持っているかどうかを確認します。

それらが意味するように、あなたはそれらを決して忘れません。

それらの1つを選び、例として取り上げましょう:

#!/bin/bash

mydir=/home/likegeeks

if [ -d $mydir ]; then

	echo "Directory $mydir exists"

	cd $mydir

	ls

else

	echo "NO such file or directory $mydir"

fi

例として、それらすべてを入力するつもりはありません。角かっこをそのまま入力して、スクリプトを正常に完了します。

他にも高度なif-then機能がいくつかありますが、別の投稿で作成しましょう。

今のところです。楽しんで、どんどん練習していきたいです。

ありがとうございます。


Linux
  1. シェルスクリプトで最も価値の高いコンテンツを表示しますか?

  2. Linux シェル スクリプトでのバックティック (`) 記号

  3. シェルスクリプトでの検索と置換

  1. ファイル記述子とシェルスクリプト?

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

  3. シェルスクリプトのステートメントブロックメカニズム?

  1. AptまたはApt-getInShell Scriptingを使用する必要がありますか?

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

  3. シェルスクリプトでの使用法()とは何ですか?