シェル関数と再利用可能なスニペット
Bash関数を定義して使い、コマンドを再利用可能でパラメーター化されたシェル用の構成要素にまとめる方法を学びます。
「シェル関数と再利用可能なスニペット」はCoddyKit上の無料Linux Command Line & Bash Scripting Masteryレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLinux Command Line & Bash Scripting Mastery学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
シェル関数を使う理由
シェル関数は複数のコマンドを1つの名前にまとめ、入力し直さずに再利用できるようにします。
- コマンドをコピー&ペーストするより高速です
- 長いエイリアスよりも整理されています
- エイリアスとは異なり、引数を受け取れます
mkcd() {
mkdir -p "$1" && cd "$1"
}関数を定義する
最も簡単な形式では name() { ... } 構文を使います。波括弧内のコマンドは、関数名を指定して呼び出したときに実行されます。
greet() {
echo "Hello from a function"
}
greet関数の引数
関数はスクリプトと同じように位置パラメーターを受け取ります。$1、$2 などです。$# は個数、$@ はすべての引数に展開されます。
backup() {
cp "$1" "$1.bak"
echo "Backed up $1"
}
backup notes.txt戻り値と終了ステータス
関数は return N(0~255)で終了ステータスを返します。成功や失敗の確認に使い、データを返す用途には使わないでください。
is_root() {
[ "$(id -u)" -eq 0 ] && return 0 || return 1
}
if is_root; then echo root; else echo normal; fiecho で出力を返す
return で返せるのはステータスコードだけなので、実際の出力は表示し、$( ) で取得します。
timestamp() {
date +%Y%m%d-%H%M%S
}
name="log-$(timestamp).txt"
echo "$name"ローカル変数
デフォルトでは、関数内の変数はグローバルです。local を使うと変数のスコープを関数内に限定でき、シェルを汚染せずに済みます。
count_lines() {
local n
n=$(wc -l < "$1")
echo "$1 has $n lines"
}引数のデフォルト値
パラメーター展開 ${1:-default} を使うと、引数がない場合にデフォルト値へフォールバックできます。
say() {
local msg="${1:-Hello World}"
echo "$msg"
}
say
say "Custom message"関数とエイリアスの違い
エイリアスは単にテキストを置き換えるだけで、位置引数を適切に受け取ることはできません。関数なら、分岐やループ、入力の処理が可能です。
- 固定的なショートカットにはaliasを使用します
- ロジックや引数が必要な場合はfunctionを使用します
alias ll='ls -la'
lt() { ls -la "${1:-.}" | tail -n "${2:-5}"; }関数を永続化する
プロンプトで定義した関数は、シェルが終了すると消えてしまいます。~/.bashrcに追加すると、すべてのセッションで使用できるようになります。
# Append to ~/.bashrc
extract() {
case "$1" in
*.tar.gz) tar xzf "$1" ;;
*.zip) unzip "$1" ;;
*) echo "Unknown format" ;;
esac
}関数の一覧表示と削除
declare -Fは関数名を一覧表示し、declare -f nameは本体を表示します。unset -f nameで関数を削除できます。
declare -F
declare -f greet
unset -f greet関数を組み合わせる
関数から別の関数を呼び出せるため、小さな再利用可能な処理を組み合わせて、より大きなツールを構築できます。
log() { echo "[$(date +%T)] $*"; }
deploy() {
log "Starting deploy"
log "Done"
}
deploy理解度チェック
シェル関数についての理解度を確認します。
まとめ
再利用可能なシェル関数の作成方法を学びました。
name() { ... }で定義し、名前で呼び出します- 引数には
$1、$@、$#を使用し、ステータスにはreturnを使用します localで変数のスコープを限定し、echoでデータを返します~/.bashrcに保存し、declare -fで内容を確認します
よくある質問
「シェル関数と再利用可能なスニペット」レッスンは無料ですか?
はい。「シェル関数と再利用可能なスニペット」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Command Line & Bash Scripting Masteryコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
「シェル関数と再利用可能なスニペット」で何を学びますか?
Bash関数を定義して使い、コマンドを再利用可能でパラメーター化されたシェル用の構成要素にまとめる方法を学びます。 ブラウザで直接実行するハンズオンコードでLinux Command Line & Bash Scripting Masteryを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Linux Command Line & Bash Scripting Masteryを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLinux Command Line & Bash Scripting Masteryは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「シェル関数と再利用可能なスニペット」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLinux Command Line & Bash Scripting Masteryレッスンでコードを書いて実行できますか?
はい。すべてのLinux Command Line & Bash Scripting Masteryレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ジョブ制御(bg、fg、jobs)
- シェル展開とグロブ
- エイリアスとカスタムプロンプト
- シェル関数と再利用可能なスニペット