C言語で指定された月の翌月を算出する方法

このQ&Aのポイント
  • C言語で指定された月の翌月を算出する方法について教えてください。
  • C言語のプログラムにおいて、指定された月の翌月を算出する方法が分かりません。
  • BシェルでC言語のプログラムを実行し、指定された月の翌月を算出する方法を教えてください。
回答を見る
  • ベストアンサー

引数で入力された月の翌月を算出する(Bシェル)

実現したいことはC言語で記述したプログラムにて「AA_201012.txt」というファイルを出力した後に、Bシェル上でmvコマンドでリネームすることです。 上記の「201012」は年月なのですが、システム日付(date)から取得したものではなく、パラメーターとして入力されてくる「201011」の翌月をC言語で記述したプログラム上で求めたものであるため、「201011の翌月」をBシェル上で求める方法がわかりません。 C言語で出力する時の201012はシステム日付ではなくパラメーターの日付を出力していて、処理を流す日付に左右されず、パラメーターの201012をファイル名として使用するという制約があります。 ある環境ではそのままの名前でファイルを出力し、ある環境ではリネームしたいが、プログラムは変えたくないため、Bシェルでなんとかしたいです。 プログラムに不慣れなため、ご教授お願いします。

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

ファイル名の4文字目から7文字目が年(4桁)、8文字目から9文字目が月(2桁)になっているとして、こんな書き方で新しいファイル名が$rに得られます。 多分もっと良い書き方があると思います。 #!/bin/sh x=AA_201012.txt y=`echo $x | cut -c 4-7` m=`echo $x | cut -c 8-9` m=`expr $m + 1` if [ $m -gt 12 ]; then m=1 y=`expr $y + 1` fi if [ $m -lt 10 ]; then r=AA_${y}0${m}.txt else r=AA_${y}${m}.txt fi echo $r

ponyonasu
質問者

お礼

ありがとうございました。 助かります。

関連するQ&A

  • シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2

    シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2...のような位置パラメタや、$?,$$,$!,$-のような特殊変数がありますが、これはPerlやRubyもあるようですが、意味や効果、やり方等は同じでしょうか。 当方はPHP,JavaScriptしか触れていませんし、PHPやJavaScriptは、そのような位置パラメタや特殊変数は見当たりませんでした…。 つまり、PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか。 こういった位置パラメタや特殊変数はPerlやRuby以外に他の言語にもありますでしょうか。PythonとかCとかJavaとか…。 また、Bシェルを学んでいる途中ですが、シェルスクリプトの中にはbourne以外にもbashやC Shell,zsh,Perlがありますが、何故Perlが入っているのでしょうか。 Perlをやっている方は別途シェルスクリプトをやる必要はないということでしょうか。

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

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

  • Cシェル内でBシェルの様な関数の記述方法はありますか?

    タイトル通り、Cシェル内でBシェルの様な関数の記述方法はありますか? Bシェルで言う所の以下の様な記述方法です。 関数() { } OSはSolarisです。 よろしくお願いいたします。

  • ★Bシェルのファイルマージについて

    ★Bシェルのファイルマージについて 「ファイルA」の一部項目と「ファイルB」の全ての項目を結合し「ファイルC」を 作成するプログラムをBシェルで作成したいのですが、方法がわかりませんので、 どなたかご教授頂けませんでしょうか。 ファイルA.txt 20100904 0 aaa bbb ファイルB.txt ccc 1111 2222 3333 ddd 1111 2222 3333 eee 1111 2222 3333 ファイルA.txtの「20100904 0」をファイルB.txtの各行の先頭に 結合しファイルC.txtを作成する。 ファイルC.txt 20100904 0 ccc 1111 2222 3333 20100904 0 ddd 1111 2222 3333 20100904 0 eee 1111 2222 3333 以上、よろしくお願い致します

  • Bシェルの.profileについて

    Solaris9を使っています。 シェルはデフォルトのBシェルを使っているのですが、 ユーザー環境定義ファイルのドットファイルを /etc/.profile のように作って環境定義 PATH=$PATH:/usr/local/bin export PATH のように書き再起動してみても、全く反映されません。 手元にある本をみると .profileはユーザー設定ファイル、 としかかかれていず、ユーザー事の設定にできるのかな?とも思うのですが、それ以上の情報が見つかりません・・・ ネットの情報を見てもbashやtcshの説明は多いのですが・・・ できれば自分のIDでログインしたときだけにその設定で起動するようにしたいのです。 つまりはユーザー設定ファイルがうまく有効になるようにしたいです。 よろしくお願いいたします

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

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

    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とパイプ機能を使用 する?しか方法はないでしょうか。 (実行環境で、パーミッションの設定でシェルを実行できない 為、上記の方法を試すには到っていません・・・パーミッションについて も、まだ理解が乏しい為。) シェルスクリプトを触り出して、まだ間もない事もあり、可能な のかどうかも判断できない状況ですが、ご存知の方がいらっしゃ いましたら、ご教授頂ければと思います。  

  • C言語からのFortranプログラムの呼び出し

    Fortranで記述した以下のような構成の有限要素法プログラムをC言語から呼び出したいのですが,具体的にどのようなコードを記述すればいいのかがわかりません.お教えいただけないでしょうか. サブルーチンinputおよびoutputでは入力および結果ファイルの入出力を行っています. 当方C言語はほぼ初心者です.Fortranのプログラミング環境としてはVisualStudio2005およびVisualFortran9.1を用いています. C言語のプログラミング環境としてはおなじくVisualStudio2005を使用したいとおもっております. [メインプログラム] open (5,file='input.dat') open (6,file='output.dat') /入出力用のファイルを開く call input(parameter1) /各サブルーチンで有限要素法を実行 call bound(parameter2) call matrix(parameter3) call solve(parameter4) call output(parameter5) close (5) /入出力用のファイルを閉じる close (6) stop end

  • BシェルのECHO_C

    Bシェルでよく使われているECHO_Cは何ですか? 様々な環境における標準出力への対応のものですか? echo \c による効果も教えてください。 以下はよくあるECHO_Cのソースです。 http://64.233.187.104/search?q=cache:0RdNFUznXWAJ:jbj.rapanden.dk/magicrescue/websvn/filedetails.php%3Frep%3D0%26path%3Dmagicrescue/trunk/configure%26rev%3D0%26sc%3D1+echo+testing+c&hl=ja&ie=UTF-8&inlang=ja

  • Bシェル内でのユーザー変更

    お世話になっております。 あるBシェルをJP1に登録しジョブ実行しようとしています。 Bシェル内には複数の処理があり、必要に応じてユーザー変更を行う必要があるのですが上手く行きません。 なお、禁止事項にrootユーザーでJP1実行、suid、guidの未指定があり上手く対応が出来ません。 どなたか上手く行く方法をご存知ありませんか? 行いたい処理は以下の通りです。 (1)実行ユーザーで実行 (2)posgreユーザーでログイン (3)ダンプファイルを取得 (4)posgreユーザーをログアウト (5)sshユーザでログイン (6)ダンプファイルを移動 (7)sshユーザをログアウト (8)終了 環境は シェルはBシェル OSはRHEL5.3 です。