印刷の演習をする前に、印刷するファイルがないと困ります。そこで、みなさんが以前に作成したC言語のソースコードを、演習室のコンピュータからダウンロードしておきましょう。
ここで用いるftpはコンピュータ間でファイルを転送するために用いられるプログラムです。ftpの説明は以下のサイトやマニュアル(man ftp)を参照してください。
ftp x1.educ.tamagawa.ac.jp
【おまけ】 telnetの使い方:昨年の実験では、Mac OSでtelnetを利用したでしょうが、同じようにLinuxでもtelnetが利用できます。たとえば、大学のサーバに接続するには以下のようにします。
telnet x1.educ.tamagawa.ac.jp
演習室のプリンタはPostScript(PS)というプリンタ言語で書かれたファイルを印刷します.そこで,テキストファイルをPSファイルに変換する必要があります。
そのひとつがa2ps.pl (これの意味はASCIIからPSへ変換する - A to PS - の意味です)といプログラムです。この課題では、まずa2ps.plを使ってテキストファイルをPSに変換します。
./a2ps.pl prog1.c > prog1.ps
gv prog1.ps
more prog1.ps
演習室には沖データのPostScriptプリンタが設置されています.このIPアドレスは,
192.168.61.10
です.このプリンタでファイルが印刷できるように設定します。
ping 192.168.61.10
lp:\ :rm=192.168.61.10:\ :sd=/var/spool/lpd/microline:\ :lf=/var/spool/lpd/microline/errors:
/var/spool/lpd/microline/としてください.
/etc/rc.d/init.d/lpd restart
lpr ファイル名.ps
みなさんのマシンでは,プリンタと交信して印刷をつかさどるlpdというプログラムが常時動いています.
ps -aux | grep lpd
とタイプしてみて下さい.動いていることが確認できましたか? man lpdとすると説明が読めます.印刷するにはlprと言うコマンドを使います.man lprとすると説明が読めます.lprは印刷すべき情報をlpdに渡して,lpdは設定されたプリンタに情報を送ります.
プリンタの設定は,/etc/printcapというファイルに書かれます.
man printcap
とすると説明が読めます.さきほどやった設定の意味を再確認してください。
印刷状況はlpqというコマンドで確認でき、印刷を取り消すにはlprmというコマンドを使いますが、さらに細かいプリンタのコントロールができるのが、lpcというコマンドです。パスが通っていないので起動するには
/usr/sbin/lpc
とタイプします.使い方はlpcの中でhelpと打ってみて下さい.
シェルにおける一連のコマンド操作をプログラムとしてファイルに記録しておいて、あとで再現する(実行させる)ことができます。たとえば、以下のような手順でシェルスクリプトを作成します。
#! /bin/sh echo "---start---" ps -aux | grep X echo "----end---"
chmod 755 psx
./psx
つまり、以上のようにすると、コマンドラインで「./psx」と打つことで、「ps -aux | grep X」と打ったのと同じ効果が得られるようになります。このように、シェルでよく行う手順をあらかじめ記録しておくのがシェルスクリプトです。
なお、1行目の「#! /bin/sh」はシェルスクリプトを実行するシェルを指定するもので、必ずこのように書くようにしてください。
シェルスクリプトの中では(中でなくても)、変数を使うことができます。
#! /bin/sh msg="This is a pen." echo $msg
#! /bin/sh echo $*
#! /bin/sh echo $3 $2 $1
#! /bin/sh read str echo $str
#! /bin/sh lsout=`ls -la` echo $lsout
シェルスクリプトの中では、各種制御構造が使えます。
if 条件文 then 条件文と一致した場合の処理 fi if 条件文 then 条件文と一致した場合の処理 else 条件文と一致しなかった場合の処理 fi
#! /bin/sh read key if [ "$key" = "y" ] then echo "YES!" else echo "NO!" fi
while 条件文 do 条件文と一致した時の処理 done
#! /bin/sh key="y" while [ "$key" = "y" ] do echo -n "continue? (y/n) " read key done echo "end."
for 変数 in リスト do リストの項目を1つずつ変数に代入して処理 done
#! /bin/sh for i in 1 2 3 4 5 6 7 8 9 10 do echo $i done
case 文字列 in パターン1) パターン1に一致した時の処理 ;; パターン2) パターン2に一致した時の処理 ;; esac
以下のような手順を実現するシェルスクリプトを作成し、(添付ファイルではなく)電子メールの本文に貼り付けて、アドレス「report@fig.ele.eng.tamagawa.ac.jp」まで提出してください。メール提出後、教員または教育補助員に報告して確認してもらい、OKをもらったら(だいたい正解していたら)次に進んでください。
$ ./imac ← たとえば imac という名前のシェルスクリプトにした。 I am an iMac! ← 実行結果。
$ ./findc prog ← prog というディレクトリを調べる。 prog/test1.c ← 実行結果。見付かったファイルが列挙される。 prog/test2.c prog/test3.c
$ ./asklr ← シェルスクリプトの実行。 Input L or R ? ← 「L」か「R」を入力するように要求してくる。 R ← ユーザが「R」と入力。 RIGHT ← 結果表示。
$ ./vecho yamada takeuchi nakamura shiozawa gogo! yamada takeuchi nakamura shiozawa gogo!
【問1】 以下のような動作をするシェルスクリプトを作成しなさい。この問題よりも先に、課題の問題が終わらなかった人はそちらを優先させてください。できるところまでがんばってやってください。
$ ./secret himitsu.txt
$ ./cmerge > cfiles.txt
$ ./hi Hi! My name is a01.cad.eng.tamagawa.ac.jp.
$ ./dateloop ← シェルスクリプトを起動すると、 2005年 5月 11日 水曜日 11:44:01 JST ← 時刻を表示して入力待ちになる。 ← ただ [Enter] を押したり、 2005年 5月 11日 水曜日 11:44:05 JST aaaa ← 適当な文字や、 2005年 5月 11日 水曜日 11:44:36 JST 123 ← 適当な数字を入れると続行する。 2005年 5月 11日 水曜日 11:44:40 JST stop ← 「stop」と入力すると終了する。
$ ./mcal 4 5 ←コマンドの入力。4月と5月を指定。 April 2005 ←以下、結果出力。4月と5月のカレンダー。 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 May 2005 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
【問2】 以下の言葉をすべて使って、UNIXのサーバについて簡潔に説明する文章を作成しなさい。その際、用語集のような箇条書きではなくて、教科書のようにつながった文章で書くようになさい。なお、無駄に長い文章(コピペ)を送りつけてくる者がいるが、文章は説明すべき内容にふさわしい簡潔な長さにまとめること。
以上
【提出期限】
【提出方法】
【PC演習室】
【注意事項】