- - PR -
シェルによる後ろ2桁の判定
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-05-23 16:17
基礎的な質問です。
現在シェルを作成していますが、if文の書き方がわからないので何方か、ヒントをお願いします。 【やりたい事】 年月の後ろ2桁が'03' or '09'なら処理を分岐させる ※正規表現をすれば良いと思ったが、うまく行かない。 【シェル例】 ym='200503' if [ $ym= ???? ];then ←このif文の書き方がわからない echo '決算処理' else echo '何もしない' fi ※参考になるURLや本があれば紹介してください | ||||||||
|
投稿日時: 2005-05-23 16:42
こんにちは。
シェルスクリプトは、何せどんなコマンドを使ってもO.K.ですから、方法は一つに限定されません。 とりあえず思いつく限りだと… 1. 正規表現を使う grep を if文の判定に組み込む。if echo "$ym" | grep -q 正規表現; then … 2. case文 + glob (所謂パターンマッチ) case 文は、条件分岐に glob が使えますので、次のようにして分岐処理ができます。 case "$ym" in ????03) 〜 ;; esac → 200503等の場合には処理が実行される 3. パラメータ展開 ${変数} にも色々バリエーションがありますが、% + glob が良いでしょうか。 もし、ym が 200503 であれば、${ym%03} は 2005 ですし、${ym%????03} は空文字列になります。これを利用して条件判断をすれば…。
とりあえず、bash(1)を見るのも十分勉強になると思います。 ※移植性を考えるなら、bash限定の機能には注意 以上、ご参考まで。 追記: そうそう。判定の正確さをどこまで求めるか(文字数チェックのみで良いか、非数字が使われていないかをチェックするか…等) によっても、スクリプトの内容が変わってきますので、その辺にも注意ですね。 [ メッセージ編集済み 編集者: angel 編集日時 2005-05-23 16:48 ] | ||||||||
|
投稿日時: 2005-05-23 17:03
モキュッ!! | ||||||||
|
投稿日時: 2005-05-23 17:14
ありがとうございました。
動作しました。 | ||||||||
|
投稿日時: 2005-05-23 17:15
も一つ参考資料。glob(7)
glob によるパターンマッチについて、です。 ※ そう言えばワイルドカードという呼び方もありましたね | ||||||||
|
投稿日時: 2005-05-24 09:22
こんな書き方はダメですか?
正規表現を使うよりもシンプルのような気がしますが・・・ case $ym in *03) *09) echo "決算処理" ;; *) ;; esac [ メッセージ編集済み 編集者: あんとれ 編集日時 2005-05-24 09:23 ] | ||||||||
|
投稿日時: 2005-05-24 09:44
ちょん切ってみるとか。
mm=`echo $ym | colrm 1 4` とか mm=`echo $ym | cut -b 5,6` とか。美しくはないけれど、やってることは明快。 [ メッセージ編集済み 編集者: ぽんす 編集日時 2005-05-24 09:45 ] |
1