• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:kshでのcase文条件範囲について)

kshでのcase文条件範囲について

このQ&Aのポイント
  • AIXのkshにおいて、特定範囲に該当する場合に結果を真とするスクリプトを組みたい。
  • 例えば、6時から18時の場合を昼とし、19時から5時の場合を夜とするスクリプトを作成する方法について教えてください。
  • 条件は実際にはより複雑で大量になりますが、詳細は機密です。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

ベタに書けば 06|07|08|09|10|11|12|13|14|15|16|17|18) 19|20|21|22|23|00|01|02|03|04|05) ファイル名展開と同じものが使えるそうなので 0[6-9]|1[0-8]) #6時から18時の場合 19|2[0-3]|0[0-5]) #19時から5時の場合 となりますが....ifを使ったほうがすっきりしそうですね

ktrickstar
質問者

お礼

回答ありがとうございました

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

関連するQ&A

  • case inの制御文

    シェルスクリプトの下記ソースに間違いはないですか? 最後のesacの次に改行は必要ですか? #!/bin/sh echo teststart i=2 case $i in 1) echo "a" ;; 2) echo "b" ;; *) echo "c" ;; esac

  • case文で困っています。

    こんにちは! 当方Linux初心者です。 現在、シェルを作成しているのですが思うように表示されなくて 困っています。 どなたかご教授いただけないでしょうか? 目的:引数を「数字」か「それ以外」かを判別するシェルを作成 #!/bin/bash case $* in [0-9]+) echo "数字" ;; *) echo "その他" ;; esac 上記のように作成したところ、全てその他と判別してしまいます。 宜しくお願い致します。

  • シェルのcase文で正規表現を使って1~99までだったらというようにしたい

    #!/bin/sh case $1 in [1-9])echo $1;; [1-9]*10+[1-9])echo $1;; *)echo "エラー";; esac シェルの第一引数が1~99だった場合、その引数を表示するというものを作りたいのですが、 これだと二桁の数字を入力した際に*)echo "エラー";;の方へ行ってしまいます。 これではだめでしょうか? またもしcase文でこういった事ができるのなら今は2行に渡って書いていますが、 これを1行にして書くことなどはできるのでしょうか?

  • "#"をcase文のパターンニ指定する

    題名にあるように、具体的には case $1 in #aaaa) echo OK! ;; *) echo NG ;; esac という風に引数に、#、を用いた場合のスクリプトを書きたいのですが 2行目の#の行がコメント行として扱われるのか うまく処理できません。 どうしたらよいでしょうか? よろしくお願いします。

  • AIX上で実行するKshについてですが、

    AIX上で実行するKshについてですが、 echoでファイルにリダイレクトした時の戻り値を「$?」で取得する事は可能でしょうか? 実行環境が無い為、確認する事ができません。 申し訳ありませんが、ご教授願います。

  • kshでのNULLの比較

    以下のスクリプトを作成し、変数に格納された値がNULLか調べたいと思っていますが、エラーが出力されてしまいます。 ■スクリプトの中身 #!/usr/bin/ksh HOGE="" if [ ${HOGE} != "" ]; then echo "${HOGE}" fi if [ -n ${HOGE} ]; then echo "${HOGE}" fi ■エラー + HOGE= + [ != ] hoge[5]: test: 0403-004 このコマンドにはパラメーターを指定してください。 + [ -n ] hoge[8]: test: 0403-004 このコマンドにはパラメーターを指定してください。 変数の中身がnullの場合、どのような比較条件を記述すればよいのでしょうか?

  • shシェル:case文のワイルドカードのエスケープについて(再)

    shシェルスクリプトのcase 文のワイルドカードのエスケープについて質問させて下さい。 (初め「プログラミング > その他(プログラミング)」で質問しましたが、 プログラムと言うよりもシェルの話しなのでこちらに移しました。) #!/bin/sh case "$i" in [Yy]"*" ) echo "Y(literary *) or y(literary *)" ;; [Yy]* ) echo "Y(wild-card *) or y(wild-card *)" ;; "[Yy]*" ) echo "(literary [Yy]*)" ;; "[Yy]"* ) echo "(literary [Yy])(wild-card *)" ;; esac とした場合、"$i" の内容に関し、 1番目は、Yまたは yの後に文字通り* 2番目は、Yまたは yで始まる任意の文字列 3番目は、文字通り [Yy]* 4番目は、文字通り [Yy] で始まる任意の文字列 の場合分けという理解でよろしいでしょうか。 私のシステム GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu) で走らせると、上のように振舞うように思うのですが、 現在読んでいる ブルース・ブリン 「入門UNIXシェルプログラミング 改訂第2版」(ソフトバンク) 第5刷、p34 の説明で "[Yy]" ) の説明が 「これはYあるいはyに限る」 "[Yy]*" ) は 「これはY* あるいは y* と言う文字に限る」 "[Yy]"* ) は 「Y か y で始まる文字列 」 と説明されているので、疑問に思いました。 私が正しく理解していれば、上の説明は誤りで、上の3つの説明に合うのは、 それぞれ、 [Yy] ) [Yy]"*" ) [Yy]* ) であるはずなのですが、いかがでしょう。 この本はシェルスクリプトの良書としてよく読まれているようで、 しかも第2版でこんな間違いをするかなぁ?とも思いまして。 ひょっとして私がなにか誤解していますでしょうか? よろしくお願いします。

  • シェルスクリプト:while文のリダイレクトはサブシェルで実行されますか

    日頃Linuxを使用している者です。手元にSolaris環境がなく検証できないためSolaris使いの方にお伺いさせてください。 お聞かせいただきたいことは次の一点です。 Q. Solaris8,9,10 のBourneShellは従来どおり、while文でリダイレクトを使ったときは、サブシェルでまわりますか? 上記質問に至った簡単な経緯を申し上げます。 実は、Linuxの/bin/ash(BourneShell相当)スクリプトで while文でリダイレクトしたところ、ループ内の変数がwhileの外でも参照できました。本来BourneShellの場合、当ケースでのループはサブシェルで回るはずですよね。 最近のGNU BASHを始め、ASHもfor,whileのりダイレクトを使ったループもカレントシェルで動作するということでしょうか? そこで、SolarisのSHはどうなのかと思った次第です。以上宜しくお願いします。 p.s. HP-UX, AIXのSHについても情報があればありがたいです。 参考までに、Linux上の実例を記します。 ■test.ash #!/bin/ash n=0 while read line do i=`expr $i + 1` echo "$i: $line" done < $0 echo "total line= $i" ■実験してみる > ./test.ash 1: #!/bin/ash 2: 3: i=0 4: while read line 5: do 6: i=`expr $i + 1` 7: echo "$i: $line" 8: done < $0 9: echo "total line= $i" total line= 9 ← しっかりインクリメントされた変数見れてるし。最近の仕様?

  • Kシェルが動作しない。

    Kシェルが動作しない。 以下シェル自体ですが、単体では動作するのですが、メインのシェルから呼び出すと動作しなくなります。 動作しない条件としては、子シェルがメインシェルのwhile文の中に入れていると無限ループ???してしまいます。(for文やそれ以外では動作します。) なにかご存知でしたら、ご教授願います。 ・子シェル(Yes or Noを入力するまで無限ループする) #!/bin/ksh answer= echo "Do you add xxxx ? ---> [y/n]\c" while : do if [ "`echo -n`" = "-n" ]; then echo "$@\c" else echo -n "\@" fi read answer case "${answer}" in [yY] | yes | YES | Yes ) return 0 ;; [nN] | no | NO | No ) return 1 ;; * ) echo "Please enter y or n." ;; esac done ・メインシェル #!/bin/ksh while read line do /xxx/子シェル.ksh done < /xxx/zzz.txt 分かりづらいかも知れませんが、ご容赦願います。

  • シェルスクリプトの内容の確認

    Solarisのスクリプトについて教えてください。 以下のスクリプトファイルが登録されており、その内容の詳細を確認したいと思っております。 (1) 5行目の "$1" は何を意味しているのでしょうか? (2) 12行目の 「echo 」文内に「{ start | stop }」と記述がありますが、この start / stop はどの情報を元に判断して結果が出力されるのでしょうか? (3) 12行目の 「echo 」文のコマンドの後に、13行目「exit 1」と14行目「;;」がありますが、 これはどちらの行でcase文を抜けるということになるのでしょうか? ========================================================================================= #!/bin/sh # # /etc/init.d/nodemanager.sh # case "$1" in start) if [ -f /home/bea81/weblogic81/server/bin/startNodeManager.sh ] ; then /bin/su - weblogic -c 'cd /home/bea81/weblogic81/server/bin;./startNodeManager.sh &' fi ;; *) echo "Usage: /etc/rc2.d/S99nodemanager{ start | stop }" exit 1 ;; esac exit 0 ========================================================================================= よろしくお願いいたします。