• ベストアンサー

シェルの引数の入力チェックをしたい・・

シェルは初心者のため、ご教授ください。 3つの引数を受け取り、値のチェックを行いたいのですが書き方がよくわかりません・・。 やりたいチェックは、 第1引数は 数字じゃなければエラー 第2引数は 文字列が "YES" か "NO"でなければエラー 第3引数は 日付のフォーマットチェック(YYYY/MM/DD以外はエラー) です。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.1

1)数字以外を削除して元と同じなら数字のみだとわかる A=`echo "$1" | sed 's/[^0-9]//g'` if test "$1" = "$A" then echo 数字だけ else echo エラー fi 2) if test "$2" = YES -o "$2" = NO then echo YES か NO else echo エラー fi 3) これは難しい。gnu date (Linux等のdate)を前提とすれば出来ます。 A=`date +%Y/%m/%d -d "$3"` if test "$3" = "$A" then echo YYYY/MM/DD形式の日付データ else echo エラー fi gnu date が無いと、大の月・小の月・うるう年などを地道に調べる必要あり。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • シェルで正規表現 YYYY/MM/DD

    引数で受け取った文字列が YYYY/MM/DD形式であるかを判定したいのですが、シェルが初めてなのでよくわかりません・・・。 どなたかご教授ください! よろしくお願いします。

  • 日付型の入力値チェック

    こんにちは。 下記のようなフォーマットで日付型のチェックをしたいと 思っています。最低限(1)YYYYが入力されていればOKで、 最高だと(8)YYYY-MM-DDThh:mm:ss.sTZDまで入力可能です。 この日付が妥当であれるかどうかの判定はどのように するのが良いでしょうか? YYYY[-MM[-DD[Thh[:mm[:ss[.s[TZD]]]]]]] (1)YYYY (2)YYYY-MM (3)YYYY-MM-DD (4)YYYY-MM-DDThh (5)YYYY-MM-DDThh:mm (6)YYYY-MM-DDThh:mm:ss (7)YYYY-MM-DDThh:mm:ss.s (8)YYYY-MM-DDThh:mm:ss.sTZD ちょっと考えたのは、まず、長さを見て各文字列を パースして各場所の数値の妥当性をチェックって 言うものです。これでも出来そうな気もしますが、 他にも良いやり方などありましたら、 ご教示宜しくお願い致します。

    • ベストアンサー
    • Java
  • シェルの引数チェックについての質問

    どうも、はじめまして。 シェルについて質問させていただきます。 現在、業務で あるプログラムを起動するための起動シェルを作成しております。 そしてその起動シェルではパラメータとして 二つの値を渡しているのですが、 そのパラメータは 1、整数でなければならない 2、整数は1~6桁で7桁以上はエラーとする ということを条件にしております。 ここでプログラムを起動する際の引数チェックとして 適切なロジックをどなたかご教示いただけないでしょうか? 自分としては まず if整数の桁チェック(length)7桁以上  then if 引数が数字であるかどうかのチェック      then プログラムの起動     else エラー else エラー fi と言う風に考えているのですが 引数が数字であるかどうかのチェックがどうにも うまい方法が思いつきません。 (AWK/[0-9][0-9][0-9][0-9][0-9][0-9]) のような形も考えたのですが、これだと 引数が整数で1桁の場合エラーになってしまって・・・。 どなたか良い方法などありますでしょうか。 ちなみに使用OSはソラリスです。 どうぞよろしくお願いいたします。

  • 日付の入力チェック

    お疲れ様です。 c++の日付の入力型のチェックを行いたいです。 具体的には文字が入力されて その型が(yyyy/mm/dd)の型で存在するかをチェックします。 数字だけの入力なら標準クラスにありそうなのですが「/」を含みチェックは行えないのでしょうか? また標準クラスにあるのならば「try~catch」を使用してエラーを受け取れる方法があったら教えてください。 お願いします。

  • シェルスクリプト:入力した日付のチェック

    BourneShell勉強中の初心者のものです。 ユーザーが(yyyy-mm-dd)の形式で入力した日付に対して、日付が指定されたフォーマットにあいかつ範囲以内であることチェックして、次のステップに進みます。 1月から12月まで毎月31日まであるものとみなし、1000年から9999年までが範囲内です。 以下のようなスクリプトを書いたのですが、もう少し短くすっきりとできないでしょうか?何か他に方法があればご教授お願いします。 echo "日付を入力してください(yyyy-mm-dd):\c" read hiduke case $hiduke in [1-9][[0-9][0-9][0-9]-0[1-9]-0[1-9]) break ;; [1-9][[0-9][0-9][0-9]-1[0-2]-0[1-9]) break ;; [1-9][[0-9][0-9][0-9]-0[1-9]-[1-2][0-9]) break ;; [1-9][[0-9][0-9][0-9]-1[0-2]-[1-2][0-9]) break ;; [1-9][[0-9][0-9][0-9]-0[1-9]-3[01]) break ;; [1-9][[0-9][0-9][0-9]-1[0-2]-3[31]) break ;; "") echo "入力されていません" ;; *) echo "指定外です" ;; esac

  • yyyy/mm/ddをyymmddの文字列に

    一つの列にyyyy/mm/dd(日付)とyymmdd(文字列と標準が混在)が混在しているものを、全て文字列のyymmddにするために、区切り位置で全てを文字列にしてから文字操作でyymmddにしようとしてます。 vbaで区切り位置を使用してyyyy/mm/dd(日付)を文字列に変換するとdd/mm/yyyyと表示されてしまいます。vbaでやらずにそのまま区切り位置で文字列に変換するとそのままyyyy/mm/ddの表示のままなのに、vbaでやるとなぜdd/mm/yyyyになってしまうのでしょうか? vbaで日付yyyy/mm/ddを文字列yyyy/mm/ddに変換する方法を教えてください。 よろしくお願いいたします!

  • 入力された日付の正規表現の仕方を教えて下さい。

    こんばんは、いつもお世話になっております。 過去ログをあさってみたのですが、探し方が悪いのか 見つけられず…。 どうかご指導よろしくお願い申し上げます。 フォームに入力された値のチェックを、CGIに渡す前に ジャバスクリプトでもチェックしたいと思っています。 未入力や半角英数字以外のエラーチェックは出来たのですが yyyy/mm/dd形式で日付の入力をして欲しい時の チェックの書き方がわかりません。 私なりに色々と調べてみて、 if(myForm.day.value.match(/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/)){ alert("日付は半角でyyyy/mm/dd形式でご記入下さい"); return false; } と記述してみたのですが、9999/99/99のような、ありえない 日付でも通ってしまいます。 そればらば、とおもい if(myForm.day.value.match(/^[2-3][0-9][0-9][0-9]\/[0-1][0-9]\/[0-3][0-9]$/)){ alert("日付は半角でyyyy/mm/dd形式でご記入下さい"); return false; } と書いてみたのですが、こちらはエラーが出ました(泣) どうか、ご指導よろしくお願い申し上げます。

  • JAVA 日付チェック方法 年・月・日 個別にする方法

    java カレンダーチェック 年チェック、月チェック、日チェックについて 年テキストボックス、月テキストボックス、日テキストボックスの3つがあります。 現在の処理方法としてyyyyとmmとddの間に「-」をつけ足してyyyy-mm-ddといった形でチェックメソッドを呼び出しています。 --メソッド内容-- public boolean isDate( String strDate ) throws Exception { try { if ( strDate == null || strDate.length() != 10) { throw new IllegalArgumentException( "引数の文字列["+ strDate +"]" + "は不正です。"); } String strDate2 = strDate.replace('-', '/'); //replace( 'before' , 'after' ) ; '-'が'/'になる DateFormat format = DateFormat.getDateInstance(); // 日付/時刻解析を厳密に行うかどうかを設定する。 format.setLenient( false ) ; format.parse( strDate2 ) ; return true; } catch ( IllegalArgumentException e ) {//引数に不正な値が渡された場合にキャッチする System.out.println("IllegalArgumentException e でcatch"); return false; } catch ( Exception e ) { System.out.println("Exception e でcatch"); return false; } }//END try --問題点-- 2009/13/12 や 2009/12/32 の場合等、 年でエラーなのか、月でエラーなのか、日でエラーなのか特定できない処理です。 年と月と日でどこでエラーが出ているのかわかる日付チェックはありますでしょうか? 尚範囲指定のif文は考えたのですが、2/29のチェック(うるう年)ができないため、あきらめました。 よろしくお願いします。

  • DataGridViewでyyyy/MM/dd

    SQLServer2008で作ったデータベースをVB2010のDataGridViewで表示させております。 DataGridViewで日付列を"yyyy/MM/dd"のスラッシュ入り10桁で表示させたいのですが表示されません。 データベース側でのデータ型は「date」となっております。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy/MM/dd" こう記述すればいいと思ったのですが、「20111227」とスラッシュ無しで表示されてしまいます。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy年MM月dd日" これは「2011年12月27日」と表示することを確認できました。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy-MM-dd" これは「2011-12-27」と表示することを確認できました。 どのようにしたら"yyyy/MM/dd"形式で表示させることが出来るのでしょうか 指導のほど、よろしくお願い致します。

  • 仕様書の表記について

    仕様書を書くにあたって数字や文字を表記する場合に "zzz9"とか時間では"yyyy/mm/dd"と表記すると思うのですが、それらの標準的な説明を書いたURLとかご存知のかたおられますでしょうか? 検索してもうまく検索できませんでした・・・ 具体的に何が知りたいかと言いますと ここに表示する値は数字何桁であるとか、ここには英数字のみとか 文字列何文字とかっていうフォーマットを表記したいのです。 よろしくお願いします。