【Linux】シェルスクリプトとは?使い方やコマンドの初心者向けまとめ

この記事からわかること

  • Linuxシェルスクリプトとは?
  • 基本的なコマンド使い方作成方法
  • 意味メリット
  • 演算子if文比較式

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

シェルスクリプトとは?

シェルスクリプトとはScript(台本)の意味からも連想できる通り、あらかじめコマンドを複数記述しておき一括で自動実行させることができる仕組みです。

シェルスクリプトはテキストファイルとして保管しておき、必要な時に実行して使用します。ログの記録や決まったファイルの移動、変数の定義、条件によるコマンドの分岐などシェルから操作できるさまざまな処理を一度の実行で行うことができるようになります。

例:スクリプトファイルの中身

#!/bin/sh

if [ -z "$num" ]
then
  echo "この変数の中身は空です"
elif [ 4 -eq "$num" ]
then 
  echo "この変数の値は4です"
else
  echo "この変数の値は4以外です"
fi

コマンドを短縮できる簡易版にエイリアスがあるので併せて参照してみてください。

基本構文と記述ルール

厳密には拡張子に決まりはありませんが識別しやすいように「.sh」がおすすめされています。

スクリプトファイルの1行目には「#!」から始まる文を記述します。「シェルスクリプトだよ」という区別と実行するシェルを明示するための1行です。(「#!」はシェバン(shebang)と読みます。)

#!/bin/bash や #!/bin/sh

スクリプトファイル内でコメントを残すには行頭に「#」を記述します。

#!/bin/sh
# これはコメントです
echo "Hello World!!"

シェルスクリプトファイルを作成する

作成する方法はいろいろありますが今回はviエディタを使用して作成してみます。作成したい階層に移動したらviコマンドの引数にスクリプトファイル名を記述します。引数に指定したファイルがあればそのファイルを、なければ自動で作成してそのファイルを編集できる状態で開いてくれるのがviコマンドです。

$ vi sample.sh  // ファイルがなければ自動作成

実行すると以下のようになります。~はその行に文字が何もないことを表しています。

~
~
~
"sample.sh" [New]

この状態でiキーを押しインサートモードに切り替えて中にスクリプトファイルの記述ルールに沿ってコマンドなどを記述します。

#!/bin/sh

echo "Hello World!!"
~
~
~
"sample.sh" [New]

記述できたらESCキーでインサートモードを解除し:wqで保存してviエディタを閉じます。viエディタの詳しい使い方は以下の記事を参考にしてください。

シェルスクリプトを実行する方法

実行するにはshコマンドを実行するだけです。カレントディレクトリを作成時から移動していた場合は相対パスなどで指定してください。

実行するコマンド

$ sh sample.sh
Hello World!!

実行するコマンド(bash)

使用しているシェルがbashの場合はbashコマンドでも実行できます。

$ bash sample.sh
Hello World!!

シェル変数を組み込んだ場合の実行コマンド

シェル変数をスクリプト内で使用したい場合sourceコマンドを使います。(shやbashでは不可)

#!/bin/sh

$ echo $num
$ msg="書き換えたよ"
$ num=5
$ msg="シェル変数です"
$ source sample.sh 
5
$ echo $msg
書き換えたよ

シェルスクリプトで定義されたシェル変数を参照する場合は上記の通りですが、スクリプトファイル内で変数を定義、使用する際にはsourceコマンドでなくても問題ありません。

スクリプトファイル自体に実行権を付与する

スクリプトファイル自体に実行権を持たせればコマンドのように使用することもできます。

実行させるにはスクリプトファイルを入力してEnterを押すだけです。しかし絶対パスもしくは相対パスで指定する点に注意してください。

$ chmod u+x sample.sh  // 実行権を付与
$ $HOME/sample.sh  // 絶対パス(置き場所によって変化)
または
$ ./sample.sh // カレントディレクトリからの相対パス

カレントディレクトリの配下にあっても./が必要になります。そのまま実行しようとするとエラーが出るので注意してください。

$ sample.sh
zsh: command not found: sample.sh

環境変数である$PATHにファイルまでのパスを登録しておけばよりコマンドらしく扱うこともできます。

実行時に引数を渡す

$ sh sample.sh ame
Hello ame!!

通常のコマンドのように実行時に引数を渡すことも可能です。渡された引数にアクセスするには$1と言った$数字形式の特殊な変数で参照します。(数字は引数の番号)例えば先ほどの第一引数に渡した「ame」を参照するにはファイル内で$1とします。

#!/bin/sh

echo "Hello $1!!"

特殊な意味を持つ変数

このようにスクリプトファイル内で特殊な意味を持つ変数が他にも存在します。

変数名 概要
$0 スクリプトファイル名
$1〜9 引数を参照 2番目なら$2、5番目なら$5
$? 1つ前のコマンドの成否(成功なら0)
$# 引数の数
$* 引数をまとめて参照
#!/bin/sh

echo "スクリプトファイル名:$0"
echo "1番目の引数:$1"
echo "2番目の引数:$2"
echo "成功したか:$?"
echo "引数の数:$#"
echo "引数全て表示:$*"
$ sh sample.sh ame HELLO 
1番目の引数:ame
2番目の引数:HELLO
成功したか:0
引数の数:2
引数全て表示:ame HELLO

if文条件分岐

シェルスクリプトの中ではif文も使用できます。条件にはもちろん真偽値を返す式を記述します。構文は以下の通りです。

if [ 条件 ] then コマンド fi

複数の条件や条件を満たさない場合

if [ 条件 ] 
then 
  コマンド
elif [ 条件 ] 
then 
  コマンド 
else
  コマンド
fi

計算式

シェルスクリプトでは数値などの計算は`expr 計算式 `に形式で記述します。exprを書き忘れるとcommand not foundなどと出るので注意してください。

#!/bin/bash

echo  `expr 10 + 50`

変数を式に混ぜる

式に変数を混ぜる際は""で囲みます。

#!/bin/bash

num=12
echo  `expr 10 + "$num"``

使用できる演算子

演算子 意味
+ 足し算
- 引き算
\* 掛け算
/ 割り算
% あまり

使用できる比較式

演算子 意味
== (または-eq) 等しい
!= (または-ne) 異なる
-gt >(より大きい)
-lt <(より小さい)
-ge =>(等しいか大きい)
-le =<(等しいか小さい)
! 否定
-a AND
-o OR
-z 文字列が空か
-n 文字列に値があるか

使用例

#!/bin/sh
if [ -z "$num" ]
then
  echo "この変数の中身は空です"
elif [ 4 -eq "$num" ]
then 
  echo "この変数の値は4です"
else
  echo "この変数の値は4以外です"
fi

入力を受け入れる

readコマンドを使えば実行時に入力値を組み込むことができます。引数に入力値を格納する変数を渡します。

#!/bin/sh

read msg

echo $msg

実行すると入力待ちの状態になるので文字列を入力するとそれが出力(echo)されます。

ループ処理

条件が真の間ループ

while [ 条件式 ]
do
  コマンド
done

条件が偽の間ループ

until  [ 条件式 ]
do
  コマンド
done

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index