• 締切済み

シェルの引数チェックについて

HP-UNIX シェルで指定された引数の桁数のチェックや入力値のチェックを 行いたいと思っております。 自分なりに調べた所、awkコマンドを使用して、lengthや正規表現 でチェックできそうなのですが、シェルで指定された引数をどの ようにしてチェックすればよいのかがわかりません。 例)aaa.sh 引数1 引数2   ⇒aaa.shの中で、$@等で上記のチェックを行う???  イメージとしては、   ・if (length($1) == 10) ・$1!~/[a-zA-Z0-9]/  でも、aaa.shの中で、awkの使用方法がわかりません。 awkを使用する以上、ls -l | awk ~~~ のように、 一度、引数をファイルに出力してから、grepとパイプ機能を使用 する?しか方法はないでしょうか。 (実行環境で、パーミッションの設定でシェルを実行できない 為、上記の方法を試すには到っていません・・・パーミッションについて も、まだ理解が乏しい為。) シェルスクリプトを触り出して、まだ間もない事もあり、可能な のかどうかも判断できない状況ですが、ご存知の方がいらっしゃ いましたら、ご教授頂ければと思います。  

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「シェルが存在しませんという旨のメッセージ」 がちょっと気になるんですが, シェルスクリプトの 1行目の #! で指定したシェルはありますか?

  • justraver
  • ベストアンサー率30% (62/201)
回答No.1

書籍などで調べたのでしょうか? awkならネットで調べて試してみる事を繰り返した方が近道ですがねぇ。 パイプなどを使った方が簡単で便利だと思いますけど。 echo $1 | awk "{~~~ で引数を渡すだけだし。 それよりもシェルが試せない方の解決が先じゃない? chmod +x aaa.sh で実行権を与えていないって話でしょうか? シェルの先頭には、#!/bin/sh などシェルのパスをかいています? 実行は、 ./aaa.sh 引数1 引数2 ですよね? 因みにawkもスクリプト言語なのでawkのスクリプトを書いてそれだけでチェックする事も可能ですよ。 アークのヘルプ(awk --help)で表示される awk '{ sum += $1 }; END { print sum }'の''内をスクリプトで記述する形です。 簡単なものだとスクリプトファイルを書かなくても記述できるのが簡単・便利なアークのよさですけどね。

myuran
質問者

補足

ありがとうございます。 実行権なんですが、 シェルの先頭には、シェルのパスは記述しております。 又、実行権も当初なかった為、chmod +x で追加致しました。 実行時は、./aaa.sh 引数1 引数2 で実行しております。 その際に、シェルが存在しませんという旨のメッセージが出ました。 (実行権を付与する前は、パーミッションが~~~と表示されておりました。) 未だに、所有者やグループと言った概念がよくわかっていないのです が、シェルファイルに実行権限(x)を付与すれば実行出来ると思って いるのですが、間違いでしょうか。 (所有者やグループと実行権限は全く別の概念?) 又、桁数チェックについては、他の質問を参考に解決しそうです。 (自宅マシンには、UNIXがないので、まだ実際には試しておりませんが・・・) LEN=`expr "$1" : '.*'` if [ $LEN -ne 桁数 ] then  #エラー fi

関連するQ&A

  • シェルの引数チェックについての質問

    どうも、はじめまして。 シェルについて質問させていただきます。 現在、業務で あるプログラムを起動するための起動シェルを作成しております。 そしてその起動シェルではパラメータとして 二つの値を渡しているのですが、 そのパラメータは 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はソラリスです。 どうぞよろしくお願いいたします。

  • 【初心者】シェルスクリプトの引数に関して

    現在、シェルスクリプトを作成しようと奮闘中です。 そこで引数に関してお伺いさせてください。 以下が実施したい内容になります。 (1)./test.sh ⇒引数を指定していないため、「引数を指定してください。」と出力し処理終了 (2)./test.sh daily⇒引数で指定した[daily]の処理を実行 (3)./test.sh weekly⇒引数で指定した[weekly]の処理を実行 (1)~(3)の条件を含んだシェルスクリプトを作成するには、 どのような実行処理が必要かご教授お願いします。 ※処理内容に関しては特に指定はございません。 例: daily=特定ディレクトリのコピー weekly=dailyで処理したディレクトリをtarで圧縮し別のディレクトリへ移動 など分かりやすい内容だと幸いです。 また、情報に不備などがありましたらご指摘おねがいします。

  • シェルスクリプトの引数について

    test.sh '*.c' といったコマンドを入力した時に、 シェルスクリプト内で引数$1を受け取ったときに$1='*.c'となるのではなく、 カレントディレクトリ内にある'*.c'の正規表現にマッチするファイルが入ってしまっています。 例)カレントディレクト内にaaa.cファイルbbb.cファイルといったファイルがある時は、 $1=aaa.c bbb.cとなっています。 '*.c'の正規表現自体をシェルスクリプト内で受け取る方法はないのでしょうか? シェルはbashを使用しています。

  • PHP シェルスクリプト 引数

    失礼します。現在PHPからシェルスクリプトを引数を付けて実行し、戻り値で確認が出来るか試しているのですがなかなか参考になる記事がなく実現が出来ない状態です 調べたところ、 phpからhoge.shというシェルファイルをargという引数で実行したいとします。 引数を"'. .'"で囲う事で、引数を渡せるようです。 $output = shell_exec('/bin/sh /path/to/hoge.sh "'.$arg.'"') var_dump($output) 上記のような記事を見つけたのですがhoge.shはどのように$argを受け取り、戻り値を渡しているのでしょうか?また、$argの値の中身は渡す引数の内容という認識で正しいのでしょうか?サンプルコードなどがあるとうれしいです。 ご教授よろしくお願い致します。

  • シェルで引数した「*」をそのまま使いたい(OSはFedora12)

    シェルで引数した「*」をそのまま使いたい(OSはFedora12) シェルの勉強をしているのですが、うまくいかないので質問させていただきます。 1つ目の引数に「*」か「+」を入れ、2つ目以降の引数に数字を入れ「*」の時は掛け算。 「+」の時は足し算をするシェルを作りたいと思っています。 イメージ ./calc.sh + 2 3 4 答えは 9 です ./calc.sh * 2 3 4 答えは 24 です 足し算はうまくできたのですが、掛け算ができません。 本やネットで調べて「これは」と思うものは試してみたのですが・・・。 sh -x で実行すると 「*」にシェルを実行するフォルダのファイル名が入っている様子です。(lsを実行した時と同様に) 何とか「*」を「*」としてそのまま受取る方法(受取って掛け算)は無いでしょうか? 以下は希望です。 ・「*」を1つ目の引数として掛け算さえできれば「*」を「*」としてそのまま受取れなくてもいい。 ・引数として渡す「*」はできれば「'」「"」「\」等を付けたくない。 ・できれば、参考URLも教えて頂きたい。 よろしくお願いします。 質問が初めてなのでカテゴリや聞き方に誤りがあればそちらも指摘して頂ければと思います。

  • シェルの引数を、実行するパラメータに指定するには?

    シェル初心者です。 シェルの実行パラメータを、その中で実行する処理のパラメータに再び指定したいのですが可能でしょうか。 ただし、パラメータの数は可変です。 環境はSolarisです。 aaa.sh aaa bbb ccc aaa.shの中 bbbコマンド aaa bbb ccc ということを行いたいです。 パラメータ数が固定であれば問題なさそうですが 可変の場合、どのような記述をすればよいでしょうか?

  • 簡単なシェルスクリプトを見てください。

    次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか?

  • awkコマンドに引数を渡す方法

    awkコマンドに対して引数を渡す方法が知りたいです。 例えば以下のようなリストファイルがあったとします。 --------------------------------------- % cat test.lst 454 100 37536 200 32432 300 34q2 400 --------------------------------------- そこで以下のシェルを実行すると --------------------------------------- #!/bin/sh for VAL in 100 200 300 do CNT=`cat test.lst | awk '$2 == $VAL {print $1}'` echo "$VAL : $CNT" done --------------------------------------- awkコマンド内の$VALが引数ではなく文字列として認識されてしまうため、 出力結果が 100 : 200 : 300 : となってしまいます。 100 : 454 200 : 37536 300 : 32432 という結果を出力したい場合(awk内の引数を有効にする場合)どうすればよいでしょうか? awkを使用しない方法もあるかと思いますが、今回はawkを使った方法を知りたいです。 宜しくお願い致します。

  • シェルスクリプト 引数の引渡しについて

    こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (1)引数作成のスクリプト _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh a="HELLO" b="\"WOW WOW\"" test.sh $a $b _/_/_/_/_/_/_/_/_/_/_/_/ (2)test.sh _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh echo $1 echo $2 echo $3 _/_/_/_/_/_/_/_/_/_/_/_/ これを実行すると $1=HELLO $2="WOW $3=WOW" となってしまいます。 これを $1=HELLO $2=WOW WOW $3=NULL(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。

  • シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのです

    シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのですが、どうしたらいいでしょうか? 例えば、以下のようなtest.shというファイルを作ったとします。 --------------- #!/bin/sh AAA="x y" echo "" | awk '{print $AAA}' -------------- としたとき、$AAAが正常に出力できません。(なお、echo "" は、awkを走らせる為の単なるダミーです。) printの部分を ・awk '{print '$AAA'}' ・awk '{print "'$AAA'"}' などともしてみましたが、ダメでした。どのようにすればうまくいくでしょうか?