シェルスクリプトの基本的な使い方(サンプルコードつき)

シェルスクリプトの基本的な使い方を、サンプルコードとともにまとめます。記事が少々長くなっています。機能を探す際は、すぐ下のコンテンツ(目次)のリンクをご利用頂けます。

シェルスクリプトの第一歩

シェルスクリプトの作成と実行

シェルスクリプトを書いて実行する方法をまとめます。シェルスクリプトを実行するには、

  1. ファイルを作成する
  2. 実行権限をつける
  3. 実行する

の3つのステップが必要です。

下記のシンプルなコードは、文字列を出力します。このコードを例に説明します。

 

① shファイルの作成

まずは、echo.sh というファイル名で、下記の文字列を記述し、保存します。

1行目は、いわゆる「おまじない」です。
3行目は、「AAAという文字列を出力せよ」というコマンドです。

 

② 実行権限をつける

次に、ターミナルで
chmod  +x  echo.sh
と打って、実行権限をつければ、このシェルスクリプトが実行できるようになります。

 

③ 実行する

その後、ターミナルで
./echo.sh
と打てば、シェルスクリプトが動作して

AAA

という文字列が出力されます。

 

コメントアウトする

コメントアウトは # で行います。

3行目  # がついているため、この「echo “AAA”」というコマンドが無効化されます。

→ 実行結果として BBB  だけが出力されます。

 

データの利用

変数を使う

変数に値を代入するには、 = を使います。
変数の値を参照するには、 ${変数名} とします。

3行目 hensu という名前の変数に、「変数」という文字列を代入します。
4行目 ${} を使い、hensuの値を参照しています。

※変数への代入時は、=の前後にスペースないようにします。
(スペースがあるとうまく動作しないため、注意が必要です。)

 

引数を使う

シェルスクリプト実行時に渡した、値を参照する事ができます。

3行目 $1 は1つ目の引数を表します。
4行目 $2 は2つ目の引数を表します。

 

./hikisu.sh aaa bbb

と実行時に「aaa」「bbb」の値を渡せば、

1つ目の引数はaaaです。
2つ目の引数はbbbです。

と出力されます。

 

繰り返し処理

For文で繰り返す①

変数に何かを入れて、それぞれ処理します。

4行目 サンプルでは、v に aaa , bbb , ccc を順次代入し、done までの処理を繰り返します。

実行結果

aaa
bbb
ccc

 

For文で繰り返す②

For文について、別の例です。

下記のコードは、カレントディレクトリのファイルを表示します。

3行目 変数 v に、「コマンド ls で表示されたもの」を順番に代入して、done までの処理を実行します。

 

while文で繰り返す

下記のコードは、日時を出力し、1秒スリープを繰り返します。

 

関数を利用し繰り返す

関数は定義する際に()をつけ、利用する際は()をつけません。関数の中に return 0 があると、そこで関数の呼び出し元に戻ります。exit 0 があると、そこで終了します。

上記コードは、3〜5行目で関数 fnc を定義し、それを8行目で3回呼び出し使っています。

 

比較

if文で分岐する

ifや、else if は下記のように使えます。

5行目 numに入っている変数が 1 と等しければ、6行目を実行します。
7行目 numに入っている変数が 2 と等しければ、8行目を実行します。

※if文は、[ ] の前後の半角スペースを削除すると、うまく動きません。

 

比較方法についての詳細がまとめられている外部サイトを紹介しておきます。

シェルスクリプト入門 [演算・比較]

 

 


関連記事
タグ: , , , ,
シェルスクリプトの基本的な使い方(サンプルコードつき)” への1件のコメント
  1. 煙々 より:

    なんか、備忘録のような記事ですね。
    BシェルやCシェルもawkも、それこそsedでも、使いこなせる達人なんて、今だとあまりいなさそう。
    使いこなすとすごいのですけどね。

    • Kapok より:

      > 煙々さん

      はい。実は備忘録です。
      時々メンテナンスし、知りたい事が分かるようにしていきます。

      シェルスクリプトはすごいですね。
      やろうと思えばプログラムを書くプログラムが書けてしまいます。
      → 今後も勉強していきたいです。

コメントを残す

メールアドレスが公開されることはありません。