• 締切済み

Linuxのtxtファイルへの出力

こんにちは。 Linuxのファイル出力について質問があります。 #/bin/sh n=$1 while [ $n -le $2 ]; do echo "year $n" cal $n n=`expr $n + $3` done というcalスクリプトを作りました。 実行するとカレンダーがコンソールのほうに出力されるのですが この出力先を「cal-年.txtファイル」という テキストファイルに変更するにはどうすればいいのでしょうか?

みんなの回答

回答No.1

「cal-年」が年号を意味するならば #/bin/sh n=$1 while [ $n -le $2 ]; do file="$n.txt" echo "year $n" >> $file cal $n >> $file n=`expr $n + $3` done でファイルに出力されると思います。 動作検証はしていませんので参考として捉えてください。

関連するQ&A

  • シェルスクリプトの問題で困っています!

    シェルスクリプトの問題を解いているのですが、いまいち分かっていないところが多いです… X 年からY 年までのカレンダーをファイル(cal-年.txt)に出力するシェルスクリプト(mkcal.sh)を 作成せよ。 実行書式./mkcal.sh x y [必須項目] 1. ファイル作成と同時にメッセージを出力し,作成したファイルが分かるようにすること。 出力例 ./mkcal.sh 2010 2012 Making cal-2010.txt Making cal-2011.txt Making cal-2012.txt 2. 作成しようとしているファイル(cal-XXXX.txt)が既に存在する場合には,エラーメッセージ File exists: cal-XXXX.txt を表示して,ファイルを作成しないこと。 出力例(cal-2011.txt が存在する場合) ./mkcal.sh 2010 2012 Making cal-2010.txt Making cal-2011.txt File exists: cal-2011.txt Making cal-2012.txt [自由項目] 1. mkcal.sh の引数を3 つ与えて実行すると,z 年飛ばしでカレンダーを出力すること。 実行書式./mkcal.sh x y z という問題に対し #!/bin/sh n=$1 while [ $n -le $2 ]; do echo "Making cal-$n.txt" /usr/bin/cal $n > cal-$n.txt n=`expr $n + 1` done #!/bin/sh n=$1 while [ $n –le $2 ]; do echo "Making cal-$n.txt" if [ -f "cal-$n.txt" ]; then echo "File exists: cal-$n.txt" else /usr/bin/cal $n > cal-$n.txt fi n=`expr $n + 1` done #!/bin/sh n=$1 while [ $n –le $2 ]; do echo "Making cal-$n.txt" if [ -f "cal-$n.txt" ]; then echo "File exists: cal-$n.txt" else /usr/bin/cal $n > cal-$n.txt fi n=`expr $n + $3` done とやっているのですが、どこで保存をすればいいか、そもそもの保存をするコマンドが分かっていない、これは合っているのか…と色々と問題点があります 誰か助けてください…お願い致します

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

    最近Linuxの使い方を勉強し始めたのですが シェルスクリプトについてわからないところがあるので教えてください。 カレンダーを出力するスクリプト #/bin/sh n=$1 while [ $n -le $2 ]; do echo "year $n" cal $n n=`expr $n + $3` done というcal.shという名前のスクリプトを作りました。 ./cal.sh x y z (x,yは年数、zは何年飛ばしで表示するかを指定する引数です) と実行すると問題なくカレンダーが表示されるのですが x,y,zの値に不適切な入力値がある場合や、引数の数が2つより少ない場合 使い方を示すメッセージを出力してプログラムを終了するようにしたいです どうすればいいのかわかりません。 本当に困っています。 親切な方のご回答をお待ちしています。

  • Linuxについて

    Linuxのスクリプトについて Linuxのスクリプトについての質問です #/bin/sh n=$1 while [ $n -le $2 ]; do echo "year $n" cal $n n=`expr $n + $3` done という引数に応じてカレンダーを出力するスクリプトを作成しました。 このスクリプトは引数が2つの場合は、1年ごとのカレンダーが表示されます。 ここに、引数が2つより少ないときはエラーメッセージを出力してプログラムを終了する機能をつけたいのですが 方法がよくわかりません。 #!/bin/bash # 実行時に指定された引数の数、つまり変数 $# の値が 3 でなければエラー終了。 if [ $# -ne 3 ]; then echo "指定された引数は$#個です。" 1>&2 echo "実行するには3個の引数が必要です。" 1>&2 exit 1 fi # ヒアドキュメントでメッセージを表示する。 cat <<__EOT__ 指定された引数は、 $1 $2 $3 の$#個です。 __EOT__ exit 0 このスクリプトをなんとか応用すればできると思うのですが なにせ初心者なもので;; ちょっと複雑になるとすぐに頭が混乱してしまう所存です・・・ どなたかご親切な方のご回答をお待ちしています。

  • linuxシェルスクリプトにつきまして

    linuxシェルスクリプトにつきまして 下記のシェルスクリプトがあります。 このうちの、 $num `expr 500 + $num` $num $num の部分がわからず、解説いただきたく、お手数をお掛けしますが、何卒よろしくお願いいたします。 #!/bin/sh num=1 while [ $num -le 100 ]; do printf "user%03d,%d,500,User %03d,/home/user%03d,/bin/bash\n" \ $num `expr 500 + $num` $num $num num=`expr $num + 1` done

  • 作成したbシェルを実行すると無限ループになってしまいます

    テストの為のデータをファイルに出力したいんですが無限ループになります。 #!/bin/sh i=1001 x=1 y=1 while [ $x -le 100 ]; do printf "$i,1019,001,3989,01" while [ $y -le 100 ]; do printf "01,00987,0,0,11,高橋," y='expr $y + 1' done i='expr $i + 1' x='expr $x + 1' y=1 done > test.csv カンマで区切った最初のデータを100個、 次のデータを100個ファイルに入れたいんですが、 実行すると無限ループになります。

  • Bシェルで、1文字づつ読み込み、番地と共に出力する方法を教えてください。

    Bシェルで、1文字づつ読み込む方法を教えてください。 次のように文字が並んでいて、 A B C D E F G H I J K L M N O P それぞれの番地と共に、上記の文字を出力する場合、 どのようにしたら宜しいでしょうか。 入力ファイル:test.txt A B C D E F G H I J K L M N O P ↓ 1 2 3 4 1 A B C D 2 E F G H 3 I J K L 4 M N O P ↓ 出力ファイル A 1 1 B 2 1 C 3 1 D 4 1 E 1 2 F 2 2 G 3 2 H 4 2 I 1 3 J 2 3 K 3 3 L 4 3 M 1 4 N 2 4 O 3 4 P 4 4 番地に関しては、次のシェルを作成しましたが、 test.txtをどのように入力したら良いかが分かりません。 Xmax=4 Ymax=4 yy=1 while [ $yy -le $Ymax ] ; do xx=1 while [ $xx -le $xMax ] ; do echo $xx $yy | awk '{ printf(" %d %d ",$1,$2) }' >>out.txt xx=`expr $xx + 1` done yy=`expr $yy + 1` done 宜しくお願いします。

  • [シェルスクリプト]ファイル変換後に空になる

    ubuntu ver9.04 上で以下のような連番(01~09)の付いたCSVファイルの4,5,11,12列目のフィールドを抜きだし区切り文字を","から空白に置き換え.datファイルにするというシェルプログラムを作っています. たまに一部のファイルが空で出力されます.(ファイルは出力されるのですが中身がない)なぜでしょうか? 誰かご教示願います. #!/bin/bash passB="./data/sw0174-h13-d0-" passA="0001" kaku=".csv" dat=".dat" #echo $passB # input file number echo 'Please input minimum file number (ex.03)!' read fnumin echo 'Please input maximum file number (ex.05)!' read fnumax delta=`expr $fnumax - $fnumin` echo "delta=" echo $delta cnt=0 while [ "$cnt" -le "$delta" ] do echo "cnt=" echo $cnt fpass=$passB$fnumin$passA$kaku echo $fpass cvtf=$passB$fnumin$passA$dat echo $cvtf cut -d ',' -f 4,5,11,12 $fpass > $cvtf cat $cvtf | sed -e 's/,/ /g' > $cvtf cnt=`expr $cnt + 1` fnumin=`expr $fnumin + 1` fnumin=0$fnumin echo "fnumin=" echo $fnumin done

  • UNIX sedの使い方

    教えてください。 UNIX のSed コマンドについてです。 [内容] テキストの中身を一行ずつ表示し、一行ずつ書き込みをしたい。 [ソース] #!/bin/sh i=1 while [ "$i" -le 10 ] do sed -n '${i}p' list.txt >> data.txt <--ここのsedの行数指定('${i}p')の使い方がわかりません。 i=`expr $i + 1` done 何方かご存知の方教えてくださいませ。

  • シェルでのループ

    プログラム完全初心者です。 whileを使って10~0までを表示するプログラムを作っているのですが 実行すると、何もコマンドがかえってきません。 文法が間違っているのでしょうか?? #!/bin/sh TOTAL=10 while [$TOTAL -lt 0] do TOTAL=`expr $TOTAL - 1` echo $TOTAL done

  • シェル ファイルの中身によって特定の処理

    シェルスクリプトに関する質問です。 少しシェルで言語風なものを作ってみようと思い、作成したのですが、上手くいかないので質問させて頂きました。内容は、特定の文字がファイルに記載されているか判定して、 特定の文字だったら処理をするというものです。 現在、このようなソースになっています↓ #!/bin/sh - #ファイルを設定(仮) file_name="dummy.sh" #行数を変数へ格納 line=$(wc -l ${file_name}) #行数をlog.txtへ書き込む echo ${line} > log.txt #行数以外にファイル名があるので削除 sed -i "s/$file_name//g" log.txt #行数を格納 Line=$(cat log.txt) i=0 #全ての行を変数へ格納 #ここが問題 配列に変数が使えない!? while [ $i = ${Line} ] do array[$i]=$(sed -n "${i}p" ${file_name}) expr `${i} + 1` done # 格納した変数をチェックして、 # 指定された文字(hello)が書かれていればhelloと表示させる b=0 while [ $b = ${main_file} ] do if [ array[$b] = "hello" ] then echo "hello" fi expr `$b + 1` done ここで、配列を利用し、変数への代入が出来ませんでした。 ただ、エラーは表示されません。。。 環境はUbuntu10.10です。 何もいじっていないので、たぶん大丈夫だと思うんですが・・・ 何か解決策はありませんか? また、コレよりいい方法などがあればぜひ教えてください。