• ベストアンサー

シェル変数でYYYYMMDDをいれたいのですが…

UNIX系初心です。 シェルススクリプトのなかでFTPであるファイルを取得したいのですが、 ファイル名がabcd.20010101.csvというファイル「日付の所が毎日更新されます」 シェル変数で > set a_name = adcd. set b_name = date "+%Y%m%d" set c_name = .csv set x_name = $a_name$b_name&c_name ftp -i -n 999.999.999.999 << END user ***** ***** get /home/$x_name /root/kensaku.csv bye END > としたところ 「b_name」のところに値がうまく入りません set b_name = date "+%Y%m%d" がうまくセットされないようです ほかによい方法があれば教えてください。 かなり困ってます。 よろしくお願いします。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

> どうもうまくいかないみたいです。 うまくいくって。 どううまくいかないのかを書かないと、それ以上分からないですね。 どうやって確認しているんですか? スクリプトを -x を指定して実行してみたら、きっと勘違いをしていることに 気がつくんじゃないかなあ。 % csh -x スクリプトファイル名 ちなみに、set x_name のところの b_name&c_name は、質問を書くときの 打ち間違いだと思っていて良いですね?

arowana
質問者

補足

うまくいきました。 SETがいらなかったみたいです。 bashでやってました… ありがとうございました。

その他の回答 (2)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

自信なしですが・・・。(^_^; dateコマンドをバッククォート(`)で囲むというのはどうでしょうか。

arowana
質問者

お礼

うまくいきました。 SETがいらなかったみたいです。 ありがとうございました。

arowana
質問者

補足

どうもうまくいかないみたいです。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> 「b_name」のところに値がうまく入りません バッククォート "`" で括りましょう。日本語キーボードなら Shift+@ です。 set b_name = `date "+%Y%m%d"`

arowana
質問者

補足

どうもうまくいかないみたいです。

関連するQ&A

  • 同時にFTP送信する際の振舞いは

    プログラミング言語の勉強も兼ねて、 ホームページを更新する簡単なプログラムを作ろうと思っています。 初心者なもので基本的なところがわからないので質問させてください。 (質問1) コンテンツのファイルをサーバーにFTP送信する際のことですが、 PCが1台、LANカード1枚、2つのプロセスx,yから同一宛先に送信する場合、 次のうち、どのような振舞いになるのでしょうか。 a) xがFTP接続した場合、xの転送が終了するまで、yは接続されず待たされる (あるいはyはタイムアウトして接続されない) b) x,yともFTP接続されるが、転送は一方が終了するまで他方は待たされる c) x,yともFTP接続され、それぞれ転送される  ただし、  c-1) ファイルは一方ずつしか送信されない    例えば x が A,B,C,D,E、y が a,b,c,d,e の5ファイルを転送する場合、    転送が A,a,B,C,b,c,d,D,E,e のようになって送られる    つまり、転送の時間は x と y を別々に送る場合とそう変わらない  c-2) 並行して送られ、転送時間はほぼ1つのプロセス分で済む また、以下のような場合はどうでしょうか。 (質問2) 1PCにLANカードを2枚入れ、x,yがそれぞれを使って同時にFTP接続する場合 (質問3) 2台のPCそれぞれにx,yを入れ、同時にFTP接続を実行した場合 サーバー側の設定(仕様)にもよるのでしょうか。 ご教授よろしくお願いします。

  • 45°傾いた座標系への変数変換

    ある本で添付の図が示してあり,xy座標系から45°傾いたXY座標系へ変数を変換するという式が掲載されています。 その式は,X=(x+y/√2)),Y=((-x+y)/√2)と書かれています。 そこで私は,A(1,2) B(2,2) C(2,1) D(1,1)という点を仮定し上記の式を使ってA',B',C',D'への変換を試みました。 A→A’(1,2)→(√2,1) B→B’(2,2)→(2√2,0) C→C’(2,1)→(3√2/2,-√2/2) D→D’(1,1)→(√2,0)  ところが,上記のA’,B’,C’、D’を座標の上にプロットしても45°傾いた正方形になりません。 そもそも式がおかしいような気がするのですが,私がどこか勘違いをしているのでしょうか。  御回答をいただけたら助かります。

  • csvファイルの横方向への改行について

    ある2次元配列があったとして, セルをちゃんと改行しつつcsvファイルに 書き込みをしようとしてるのですが 英字の方へ改行をする方法がわかりません. int a[4][4] ;   :   : FILE *file; file = fopen("condidate.csv","w"); for(int x = 0; x < 5 ; x++) { for(int y = 0; y < 5; y++) { fprintf(file,"%d\n", a[x][y]); } //改行←ここがわからない } fclose(file); csvファイル 1つの配列が1つのセルに入っている状態 ↓  A B C D _ _ _ _ 1 |1 1 1 1 2 |1 1 1 1 3 |1 1 1 1 4 |1 1 1 1 上記のものを作りたいです. よろしくお願いいたします.

  • データベースのバックアップだけ取れない場合があって困ってます(バックアップ用シェルの書き方に関して)

    以下のようなシェルをcronで実行し、バックアップを取ろうとしているのですが、データベースのバックアップだけ、うまくいく場合と抜けてしまう場合があります。 下のシェルのどの部分を変えれば、データベースのバックアップも毎回ちゃんと取ってくれるようになるのでしょうか。 ------------------------------ #!/bin/bash NAME="name" DBNAME="dbname" DBUSER="dbuser" DBPASS="dbpass" HTML="/home/test/www/" BACKUPDIR="/bakup/" mkdir -p $BACKUPDIR$NAME mkdir /tmp/backup-$NAME-`date +%Y%m%d` mysqldump --databases $DBNAME > /tmp/backup-$NAME-`date +%Y%m%d`/bk.sql -u $DBUSER --password=$DBPASS --opt ( cd /tmp/backup-$NAME-`date +%Y%m%d` ; tar cf /tmp/backup-$NAME-`date +%Y%m%d`.tar . ) ( cd $HTML; tar rf /tmp/backup-$NAME-`date +%Y%m%d`.tar . ) rm -r /tmp/backup-$NAME-`date +%Y%m%d` gzip /tmp/backup-$NAME-`date +%Y%m%d`.tar mv -f /tmp/backup-$NAME-`date +%Y%m%d`.tar.gz $BACKUPDIR$NAME find $BACKUPDIR$NAME -type f -mtime +7 | xargs rm -f ------------------------------ それでは、宜しくお願いします!

  • VBScript ワードunicodeテキスト保存

    大量のワードのファイルをテキスト保存する仕事が入り、フォルダ内にあるワードファイルをテキスト保存し、テキストボックスやオートシェープの中のテキストも抜き出すプログラムを「VBScript」で作りました。 テキスト保存する際、Unicode形式で保存しなければならず、調べると、「SaveAs …, 7」がUnicodeによるテキスト保存だと分かったのですが、実際にやってみると、拡張子が「.rtf」ファイルだけが、Unicodeによるテキスト保存され、「.doc」や「.docx」は、「シフトJIS」保存されてしまいました。 私、何か間違っているのでしょうか? 以下、一応、プログラムをコピーしておきます。 問題の部分は「行13」です。 なお、ワードは「Word2010」です。 01 Option Explicit 02 Public a, b, c, d, e, f, g, h, t, u, v, w, x, y, z 03 Set w = CreateObject("Word.Application") 04 w.Application.DisplayAlerts = False 05 w.Visible = False 06 Set x = CreateObject("Scripting.FileSystemObject") 07 Set y = x.GetFolder(".") 08 For Each a In y.Files 09 b = LCase(x.GetExtensionName(a.Name)) 10 If b = "doc" or b = "docx" or b = "rtf" Then 11 h = x.GetBaseName(a.Name) 12 Set z = w.Documents.Open(y & "\" & a.Name) 13 z.SaveAs y & "\" & h & ".txt", 7 14 z.Close 15 Set z = Nothing 16 End If 17 If b = "docx" Then 18 Set z = w.Documents.Open(y & "\" & a.Name) 19 z.SaveAs y & "\qkza934irs2801wuptc56ynv7bm.doc", 0 20 z.Close 21 Set z = Nothing 22 Set z = w.Documents.Open(y & "\qkza934irs2801wuptc56ynv7bm.doc") 23 Call o 24 z.Close 25 Set z = Nothing 26 x.DeleteFile(y & "\qkza934irs2801wuptc56ynv7bm.doc") 27 ElseIf b = "doc" or b = "rtf" Then 28 Set z = w.Documents.Open(y & "\" & a.Name) 29 Call o 30 z.Close 31 Set z = Nothing 32 End If 33 If f > "" Then 34 Set t = x.CreateTextFile(y & "\TB_" & h & ".txt", True, True) 35 t.Write f 36 t.Close 37 End If 38 Next 39 w.Quit 40 Set z = Nothing 41 Set y = Nothing 42 Set x = Nothing 43 Set w = Nothing 44 MsgBox("Finished!") 45 Sub o 46 f = "" 47 For Each c In w.ActiveDocument.Shapes 48 If c.Type = 1 or c.Type = 17 then 49 Set v = c.TextFrame 50 e = v.TextRange 51 f = f & e 52 Set d = Nothing 53 ElseIf c.Type = 6 Then 54 For Each g In c.GroupItems 55 Set u = g.TextFrame 56 e = u.TextRange 57 f = f & e 58 Set u = Nothing 59 Next 60 End if 61 Next 62 End Sub よろしく、お願いします。

  • 4つの変数を持つ方程式の解き方

    空間中に3点 A( a x , a y , a z ) ,B ( b x , b y , b z ) ,C ( c x , c y , c z )があります。 この3つの点がつくる平面の方程式を求めて頂けませんか? 平面の方程式の一般形の ax+by+cz+d=0 に点A,点B,点Cの座標を代入して得られる連立方程式を解けばいいらしいのですが、解き方が分かりません。解法を分かる方がいらっしゃいましたら教えて頂けませんか? ただ、点A,B,Cの座標の例を挙げますと A(-343,-418,960)B(-507,-396,1062)C(-454,-301,1331) というように、非常にややこしいというか…計算しにくい値のように感じます。 値に関係なく解く解法のようなものがあればいいのですが…。 すみませんが、よろしくお願い致します。

  • 式に含まれる変数の消去法について

    A+B=6 C+D=6 C/A=D/B X=AC Y=B^1/2D^1/2 これらの式から変数ABCDを消去して XとYのみで式を作りたいのです 答えはX^1/2+Y=6だそうです いろいろとあっちこっち式を代入すること2時間奮戦したのですが無理でした よろしければ計算過程を教えて下さい あとこのような場合この式をここにこの順序で代入すれば答えが出るだろうというような法則とかコツのようなものがあるんでしょうか? 数学的なセンスなのでしょうか?

  • VHDLについて教えてください

    VHDLついてお教えください。 今、VHDLの勉強しているのですがsignal文とvariable文の違いが良く分かりません。 以下の記述で(1)の結果なぜこのようになるのか分かりません。 ご存知の方、ご教授願います。 例(1) process(A, B, C, D) begin D < = A; X < = B + D; D < = C; Y < = B + D; end process; 結果 X < = B + C; Y < = B + C; 例(2) process(A, B, C) variable D : std_logic_vector( 3 downto 0 ); begin D := A; X < = B + D; D := C; Y < = B + D; end process; 結果 X < = B + A; Y < = B + C;

  • データの選択

    csvファイルから、特定の条件を持つ行を抽出したいです。 a1, b1, c1, d1, e1 a2, b2, c2, d2, e2 a3, b3 ,c3, d3, e3 :   :   :   :  : an, bn, cn, dn, en とあったときに d-c/d+c > 0.5となる行だけを出力したいのですが file.each{|line| x = line.split(",").map{|i|i.to_i} if 0.5<(x[3]-x[2])/(x[3]+x[2]) p x end } と自分でやってみたものの、出来ませんでした。 どうしたらよいのでしょうか。

    • ベストアンサー
    • Ruby
  • シェルスクリプトの内容について

    業務で使用しているシェルスクリプトの中身に find A/B/ -name File1 -exec mv {}/C/D \; ※AとBとCとDはディレクトリ名、File1はファイル名   という記述があってfindによる検索結果をmvの引数に持ってきて C/D/の直下にFile1を移動している意味はわかったのですが最後尾にある「¥」の意味がよくわかりません。 よろしくお願いします。