■ はじめに
小ネタ。 前方一致をやりたくて調べたら、 意外と grep を使ったりとかが多かった。 ただ、もっとシンプルにできる方法があったので、メモ。
目次
【1】部分一致(前方一致・後方一致) 【2】サンプル 例1:前方一致 例2:後方一致 例3:部分一致 【3】おまけ:共通化(関数化)
【1】部分一致(前方一致・後方一致)
* 「case文」と 「ワイルドカード(*)」で簡単に実装できる => サンプルを見たほうが理解が早いと思う。
【2】サンプル
例1:前方一致
#!/bin/bash # 対象文字列 env="prod-v2" case "${env}" in prod*) env_type=1 ;; stage* | nonprod*) env_type=2 ;; *) env_type=0 ;; esac echo "Env Type = ${env_type}"
出力結果
Env Type = 1
例2:後方一致
#!/bin/bash # 対象文字列 file_name="hello_world.jpg" # 後方一致 case "${file_name}" in *.txt) file_type=1 ;; *.jpg|*.jpeg) file_type=2 ;; *.mp3) file_type=3 ;; *) file_type=0 ;; esac echo "File type = ${file_type}"
出力結果
File type = 2
例3:部分一致
#!/bin/bash TARGET_FILE=${1} is_insert=0 case "${TARGET_FILE}" in *_insert_table_*.sql) is_insert=1 ;; *) is_insert=0 ;; esac echo "is_insert = ${is_insert}"
出力例
$ ./sample.sh is_insert = 0 $ ./sample.sh 01_insert_table_xxx.sql is_insert = 1 $ ./sample.sh 01_insert_table_xxx.hql is_insert = 0 $ ./sample.sh 01_inser_table_xxx.sql is_insert = 0 $ ./sample.sh 02_insert_table_yyyy.sql is_insert = 1 $ ./sample.sh 02_insert_tableyyyy.sql is_insert = 0 $ ./sample.sh _insert_table_.sql is_insert = 1
【3】おまけ:共通化(関数化)
#!/bin/bash PROD_TYPE_VALUE=1 STAGE_TYPE_VALUE=2 OTHER_TYPE_VALUE=0 get_env_type() { case "$1" in prod*) env_type=${PROD_TYPE_VALUE} ;; stage* | nonprod*) env_type=${STAGE_TYPE_VALUE} ;; *) env_type=${OTHER_TYPE_VALUE} ;; esac echo "${env_type}" } is_prod() { env_type=`get_env_type $1` if [ ${env_type} = ${PROD_TYPE_VALUE} ]; then echo 1 else echo 0 fi } is_stage() { env_type=`get_env_type $1` if [ ${env_type} = ${STAGE_TYPE_VALUE} ]; then echo 1 else echo 0 fi } # 対象文字列 env="prod-v2" prod=`is_prod ${env}` echo "Prod = ${prod}" stage=`is_stage ${env}` echo "Stage = ${stage}"
出力結果
Prod = 1 Stage = 0
参考文献
https://mag.osdn.jp/09/01/06/0127210
関連記事
条件分岐 ~ if / case ~
https://dk521123.hatenablog.com/entry/2015/05/01/000043
シェル ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ 基本構文編 ~
https://dk521123.hatenablog.com/entry/2015/02/20/001600
関数
https://dk521123.hatenablog.com/entry/2015/03/17/233124