■ はじめに
https://dk521123.hatenablog.com/entry/2021/07/09/115553
などで、シェルを使う機会があり、引数を使って もう少しきれいに書けるので、メモ。
目次
【1】引数を取得する 例1:引数を変数に設定 【2】引数チェック 例1:引数が3つない場合エラーにする 【3】引数を配列として取得する 例1:引数を配列として取得し、出力する 例2:引数の一部を配列として取得し、出力する 補足1:shift コマンド 補足2:配列 補足3:$@ と $* の違い 【4】引数により処理を変える
【1】引数を取得する
* $1~$9 で取得できる * 10以降は、${10}, ${11}, ... (${X}で癖をつけておいたほうが良さそう)
例1:引数を変数に設定
sample.sh
#!/bin/bash VAL1="${1}" VAL2="${2}" VAL3="${3}" echo "Result [${1}, ${2}, ${3}]"
出力結果例
$ ./sample.sh hello world Mike Result [hello, world, Mike]
【2】引数チェック
例1:引数が3つない場合エラーにする
#!/bin/bash if [ $# -ne 3 ]; then echo "ERROR MESSAGE" exit 1 fi
【3】引数を配列として取得する
* 「@」で取得する * 引数の一部を変数、以降を配列として取得するには、shift を使う
例1:引数を配列として取得し、出力する
sample.sh
#!/bin/bash VALS="$@" for val in ${VALS[@]}; do echo "Result ${val}" done
出力結果例
$ ./sample.sh hello world Mike Result hello Result world Result Mike
例2:引数の一部を配列として取得し、出力する
sample.sh
#!/bin/bash VAL1=${1} VAL2=${2} shift 2 VALS=("$@") echo "VAL1 = ${VAL1}" echo "VAL2 = ${VAL2}" for val in ${VALS[@]}; do echo "Result ${val}" done
出力結果例
$ ./sample.sh hello world Mike Tom Sam VAL1 = hello VAL2 = world Result Mike Result Tom Result Sam
補足1:shift コマンド
* 引数をずらしたい場合に使用する
構文
# 引数をNつずらす shift N
参考文献
https://xtech.nikkei.com/it/article/COLUMN/20060227/230882/
補足2:配列
* 以下のサイトなどを参照のこと。
https://www.atmarkit.co.jp/ait/articles/1905/22/news004.html
補足3:$@ と $* の違い
* ほぼ同じだが、以下の違いがある(これでハマってうまく動かなかった) + "$*" : "a b c" に展開される + "$@":"a" "b" "c" と別々の文字列に展開される
https://se.cite.ehime-u.ac.jp/~aman/memo/bash/shell_prog1.html
【4】引数により処理を変える
* CASE 文を使うと奇麗に書ける
例1:Hello world
#!/bin/bash ENV="$1" case "${ENV}" in prod) echo "Hello!" ;; stage) echo "Good morning!!" ;; dev | *) echo "Good bye so long..." ;; esac
参考文献
https://hi-yamamoto.hatenablog.com/entry/2014/09/29/153935
https://maku77.github.io/linux/startup/command-line-params.html
関連記事
シェル ~入門編~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ 基本構文編 ~
https://dk521123.hatenablog.com/entry/2015/02/20/001600
シェルスクリプトあれこれ
https://dk521123.hatenablog.com/entry/2018/03/03/210642
Github Actions ~ 外部シェルスクリプト実行 ~
https://dk521123.hatenablog.com/entry/2024/01/19/003044