前提・実現したいこと
シェルスクリプトtest.sh
にパラメータを4つ渡し、
パラメータが1つでも空文字"" の場合は不正として終了したいです。
正常時の実行イメージ
sh test.sh 10 15 2 30
例えばパラメータを下記に設定した場合、エラーにしたい。
sh test.sh 10 15 "" 30
なお「パラメータの個数が4つかどうか」は他の処理でチェックしているので、
確認したいのは「パラメータに空文字""が渡っていないか」だけです。
試したこと
bash
1#!/bin/bash - 2## IFパラメータ空文字チェック 3for v in $1 $2 $3 $4 4do 5 eval val=$${v}; 6 if [ -z ${val} ]; then 7 echo"パラメータに空文字を含んでいるため、登録できません" 8 exit 1 9 fi 10done 11 12echo "テストは成功です"
-xvオプションを付与して実行した場合、下記のような結果になりました。
console
1 2# sh -xv UnitSyncWebSettingCron.sh 10 15 "" 30 3## IFパラメータ空文字チェック 4for v in $1 $2 $3 $4 5do 6 eval val=$${v}; 7 if [ -z ${val} ]; then 8 echo"パラメータに空文字を含んでいるため、登録できません" 9 exit 1 10 fi 11done 12+ for v in '$1' '$2' '$3' '$4' 13+ eval 'val=$10' 14val=$10 15++ val=100 16+ '[' -z 100 ']' 17+ for v in '$1' '$2' '$3' '$4' 18+ eval 'val=$15' 19val=$15 20++ val=105 21+ '[' -z 105 ']' 22+ for v in '$1' '$2' '$3' '$4' 23+ eval 'val=$30' 24val=$30 25++ val=0 26+ '[' -z 0 ']'
変数が思うように展開されていないように見えるのですが、どのように書けば正しく展開できるか、解決方法がわかりません。
お詳しい方、よい書き方をご教示願えませんでしょうか。
よろしくおねがいします。
補足情報(FW/ツールのバージョンなど)
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/08 10:56
2020/05/08 11:10