シェルスクリプトの自動化開発

シェルスクリプトとは、シェル言語で記述された自動化スクリプトです。シェルは弱型言語であり、変数のデータタイプを明示的に宣言する必要はありません。

1.1 シェル変数

username='john'
echo ${username} #結果: john
または
echo $username   # 結果: john

Linuxでは、インタフェース上で直接変数usernameを定義します。注意: username='john'の間にはスペースを入れてはなりません。Bashでは、スペースは重要な意味を持ちます。

1.2 シェルスコープ

スコープの理解(入れ子のボックス)

1.3 単引用とダブル引用の違い

  • 単引用:特殊文字を認識しません。
  • ダブル引用:特殊文字を認識します。

1.4 変数の分類

シェルの変数は、ローカル変数、グローバル変数、環境変数に分類されます。

  • ローカル変数:現在のシェル内でしか使用できません。
  • グローバル変数:現在のシェルとそのサブシェルで使用できます。
  • 環境変数:グローバル変数とほぼ同じですが、大文字を使用します(例:PATHなど)。

exportを使用してローカル変数をグローバル変数または環境変数に昇格させることができます。

1.5 変数の表示

  • env: 現在のシェルまたはユーザーが使用できるすべてのグローバル変数と環境変数を表示します。
  • set: envと同様に表示しますが、ローカル変数も含まれます。
  • printenv varname: 特定のグローバル変数varnameの値を表示します。

1.6 サブプロセスと親プロセス

bash/shを使用してスクリプトを実行すると、新しいサブシェルが開始され、現在のシェルの変数は保持されません。sourceを使用してスクリプトを実行すると、現在のシェル内でスクリプトが読み込まれ、変数は保持されます。

1.7 特殊変数

#!/bin/bash
echo "特殊変数 \$0 \$1 \$2"
echo "結果:" \$0 \$1 \$2
echo "#########"
echo "特殊変数 \$# はパラメータの総数"
echo "結果:" \$#
echo "############"
echo "特殊変数 \$*"
echo "################"
echo "特殊変数 \$@"
  • \$#: パラメータの総数
  • \$*: すべてのパラメータを1つの単語として扱います。
  • \$@: 各パラメータを個別の単語として扱います。

2.1 bashの基本的な組み込みコマンド

  • echo: 文字列を表示します。
  • eval: 複数のコマンドを実行します。
  • exec: 新しいプロセスを作成せずに次のコマンドを実行し、終了します。
  • export: 変数をエクスポートします。
  • read: 標準入力から入力を読み取ります。
  • shift: スクリプトのパラメータをシフトします。

2.2 サブストリングの高度な使用法

user="john"
${変数} # 変数名を返す
${#変数}  # 変数の長さを返す
${変数:開始位置} # 開始位置以降の文字を返す
${変数:開始位置:長さ} # 開始位置から指定した長さの文字を返す
${変数#パターン} # 変数の先頭から最短一致するパターンを削除
${変数##パターン} # 変数の先頭から最長一致するパターンを削除
${変数%パターン} # 変数の末尾から最短一致するパターンを削除
${変数%%パターン} # 変数の末尾から最長一致するパターンを削除
${変数/パターン/文字列} # 最初に一致するパターンを文字列に置換
${変数//パターン/文字列} # すべての一致するパターンを文字列に置換

2.3 文字列の長さの計算方法

  • wc: 文字列の長さを計算します。
  • expr: 文字列の長さを計算します。
  • awk: 文字列の長さを計算します。

2.5 特殊変数の拡張

  • \${変数:-デフォルト}: 変数が空の場合、デフォルト値を返します。
  • \${変数:=デフォルト}: 変数が空の場合、デフォルト値を代入し、返します。
  • \${変数:?メッセージ}: 変数が空の場合、メッセージをエラーとして出力します。
  • \${変数:+文字列}: 変数が空でない場合、文字列を返します。

例: ファイルの削除スクリプト

#!/bin/bash
find \${path:=/backup/data/} -name "*.tar.gz" -type f -mtime +7 | xargs rm -f

タグ: bash シェルスクリプト 変数 スコープ 特殊変数

7月19日 01:10 投稿