Taro-cshプログラミングの応用.jt

Similar documents
練習 4 ディレクトリにあるファイルを直接指定する (cat) cat コマンドを使う (% cat ファイル名 ) と ファイルの内容を表示できた ファイル名のところにパス名を使い ディレクトリ名 / ファイル名 のように指定すると ディレクトリ内にあるファイルを直接指定できる 1 % cat _

プレポスト【解説】

_unix_text_command.pptx

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

PowerPoint Presentation

PowerPoint プレゼンテーション

情報処理概論(第二日目)

Microsoft PowerPoint - スハ?コン利用入門_ _UNIX利用の基礎知識.pptx

TC5.ids

160420c_unix.pptx

<4D F736F F F696E74202D E3F FC96E55F F554E CC8AEE D8EAF2E B8CDD8AB B83685D>

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - InfPro_I6.pptx

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

シェルプログラミング コマンドをパイプでつなげるだけでは済まないような ある程度まとまった処理を複数のコマンドを制御構文を用いたりしてファイルとしたものを ( シェル ) スクリプトと呼ぶ シェルプログラム バッチなどともいう.bash_profile もシェルスクリプトなので このファイルを解読し

Taro-スタック(公開版).jtd

Taro-Basicの基礎・はじめに(公

スライド 1

k_seminar_hands_on_for_linux_beginner.pptx

情報処理概論(第二日目)

170420_unix.pptx

1 ログインとログアウト 1.1 ログイン ログイン画面で [ password ] 欄にパスワードを入力します (図 1) 図 1 ログイン画面 正しくログインができると Ubuntu のデスクトップ画面 図2 が表示されます 図2 Ubuntu デスクトップ画面 2

< F2D837C E95CF CF68A4A94C5816A2E6A>

シェルスクリプトマガジン vol.30

第 3 回情報基礎演習 UNIX / Linux: ファイルシステム シェルを理解しよう! 谷口貴志 Panda に login し 情報基礎演習クラスの VDI から Ubuntu に接続し Linux に login した後, 左 上の Activity 端末のアイオン をクリック 端末 を立ち

これを調べるには pwd というコマンドを使います pwd とは print working directory の頭文 字をとったもので これから意味は明らかですよね 演習 1 (a) pwd を実行した結果を書け なお 立ち上げた直後の作業用ディレクトリのことをホー ムディレクトリ もしくは単に

情報処理概論(第二日目)

操作方法 XXXTOEMF は コマンドライン形式のアプリケーションです 通常のコマンドと同じように コマンドラインからの実行やバッチファイルに組み込むことが可能です インストールについては, 別紙の KDxxxx コンバートソフトの特記事項について を参照してください ここでは 直接コマンドライン

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

スライド 1

スクールCOBOL2002

フィルタとは

リスト 1 1 <HTML> <HEAD> 3 <META http-equiv="content-type" content="text/html; charset=euc-jp"> 4 <TITLE> 住所の検索 </TITLE> 5 </HEAD> 6 <BODY> <FORM method=

デジタル表現論・第4回

Taro-ファイル処理(公開版).jtd

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Taro-リストⅠ(公開版).jtd

1. 作業フロー 公開鍵 / 秘密鍵の生成 スパコンゲートウェイノードへの ログイン時に使用する鍵の作成 公開鍵の設置 スパコンゲートウェイノードへの ログイン時に使用する公開鍵をスパコンに登録 SSH 接続確認 スパコンゲートウェイノード / インタラクティブノードへのログイン 初期パスワードの変

Microsoft PowerPoint - 05.pptx

Scilab 勉強会 ( 第 3 回 ) 高橋一馬, 十文字俊裕, 柏倉守 平成 17 年 11 月 15 日 関数 ファイルはエディタを用いて作成する.Scilab にはエディタ SciPad が附属している.SciPad では なく他のエディタを利用してもよい. 作成した関数は Scilab に

文法と言語 ー文脈自由文法とLR構文解析2ー

テキスト処理第 2 回 田中哲産業技術総合研究所情報技術研究部門 akira/textprocess/

Si 知識情報処理

情報処理Ⅰ

PowerPoint プレゼンテーション

USP MAGAZINE 2014 August

slide5.pptx

DVIOUT

デュアルウェア講習会課題 5 会津大学講習会 簡単な IoT を作成 2018 The University of Aizu

JEB Plugin 開発チュートリアル 第4回

シェルスクリプトマガジン Vol27

memo

UNIX 初級講習会 (第一日目)

PowerPoint プレゼンテーション

基礎プログラミング2015

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

計算機プログラミング

memo

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint - CproNt02.ppt [互換モード]

本チュートリアルについて 14 部構成 比較的簡単なトピックから 各回 プログラミング言語 任意 チュートリアルで 新しい内容 宿題 プログラミング演習 次の週 結果について発表 もしくは話し合いをする スライドは Python で Python, C++, Java, Perl についての質問い答

memo

Microsoft PowerPoint pptx

PowerPoint プレゼンテーション

-2 gnuplot( ) j ( ) gnuplot /shell/myscript 1

( ) 1 Windows HTML ( ) ( ) ( ) WWW 10 ( )

メソッドのまとめ

(C) Copyright CANVASs Co

A

Microsoft PowerPoint - ProD0107.ppt

プログラミングA

正規表現応用

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

人工知能入門

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

メソッドのまとめ

memo

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

/

PowerPoint プレゼンテーション - 物理学情報処理演習

Linux 利用の手引き ( 基本編 ) Linux 手引き ( 基本編 )-1 総合情報センター 2018 年 3 月版 総合情報センター 1 概要 Linux システム Linux 起動 サインイン Gnome ウインドウ メニュー操作

B演習(言語処理系演習)第一回

多くのコマンドやソフトウェアは 1 なんらかの情報を受け取り 2 処理し 3 結果を出力する ( 前ページの図 ) cat の処理結果は端末ウィンドウに表示されるが これは cat が結果を標準出力に 吐き出した ( 出力した ) からである 通常 標準出力に吐き出された情報は端末ウィンドウ に表示

2006年10月5日(木)実施

Cプログラミング1(再) 第2回

Microsoft PowerPoint pptx

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

訋箊æ©�ã…Šã…�ㇰㅩã…�ㅳㇰ - 第5åłž 浆㇄ㆮ勶御2

ex04_2012.ppt

Microsoft Word - FreeBSD

Prog1_15th

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - kougi9.ppt

Taro-再帰関数Ⅲ(公開版).jtd

Transcription:

c s h プログラミングの応用 0. 目次 1. 課題 課題 1 : 与えられたパス名からディレクトリ名とファイル名を分離し出力せよ 課題 2 : オプション (-in) の後に続く文字列とオプション (-out) の後に続く文字列をそれぞれまとめる オプションの指定がなく文字列から始まるとき -in を仮定する 課題 3 : 複数のファイルから与えられたパターンとマッチする文字列を含む行を取り出せ ただし パターンは ' で囲むこと 課題 4 : ファイルをコピーせよ 課題 5 : 標準入力からの入力をファイルに保存せよ 課題 6 : あるディレクトリの直下にあるファイルをすべて表示せよ ディレクトリが指定されない場合 現ディレクトリとする 課題 7 : あるディレクトリ以下の木構造をスタックを使って表示せよ 課題 8 : コマンドを再帰的に呼び出すことができる 再帰動作の確認をせよ 課題 9 : 指定されたディレクトリ以下の木構造を表示 ( 再帰呼び出しによる ) せよ 課題 1 0 : 指定されたディレクトリ以下の木構造を表示 ( 再帰呼び出しによる ) し 通常のファイルの場合 最初の 20 行を表示せよ また 不要なファイルは削除できること - 1 -

1. 課題 課題 1 : 与えられたパス名からディレクトリ名とファイル名を分離し出力せよ 利用法 : % csh111 パス名 ( ヒント ) 文字列の分離 オペレータ 機能 :r 文字列中の最右端にある. 以前を抽出 :e 文字列中の最右端にある. 以後を抽出 :h 文字列中の最右端にある / 以前を抽出 :t 文字列中の最右端にある / 以後を抽出 シェルプログラム (csh111) 2 # << csh111 >> 3 # 引数に対する処理 4 if( $#argv == 0 ) then 5 echo " 利用法 : % csh111 パス名 " 8 set temp = $1 9 while( $temp!= "" ) 10 # temp1 にパス名中の最右端 / 以前を抽出 11 set temp1 = $temp:h 12 if( $temp1 == $temp ) then 13 # パス名中に / がないとして終了 14 echo $temp 15 break 16 endif 17 # パス名中の最右端 / 以降を抽出し表示 18 echo $temp:t 19 set temp = $temp1 20 end % csh csh111 /A/B/a.c a.c B A % csh csh111 a.c a.c % csh csh111 利用法 : % csh111 パス名 - 2 -

課題 2 : オプション (-in) の後に続く文字列とオプション (-out) の後に続く文字列をそれぞれまとめる オプションの指定がなく文字列から始まるとき -in を仮定する 利用法 : % csh221 -in aaa -out bbb -in ccc シェルプログラム (csh211) 2 # << csh211 >> 3 # 引数に対する処理 4 if( $#argv == 0 ) then 5 echo " 利用法 : % csh211 -in 文字列 -out 文字列 " 8 set instring # オプション ( -out) の文字列 9 set outstring # オプション ( -in) の文字列 10 set ind = "-in" # オプションの状態を示す 11 while( $#argv > 0 ) 12 # temp1にパス名中の最右端 / 以前を抽出 13 set x = $argv[1] 14 shift argv 15 # オプション ( -in) の処理 16 # "$x" から " を取るとエラーになる 17 if( "$x" == "-in" ) then 18 set ind = $x 19 continue 20 endif 21 # オプション ( -out) の処理 22 if( "$x" == "-out" ) then 23 set ind = $x 24 continue 25 endif 26 # 文字列の処理 27 if( "$ind" == "-in" ) then 28 set instring = ( $instring $x ) 29 else 30 set outstring = ( $outstring $x ) 31 endif 32 end 33 echo " オプション ( -in): $instring" 34 echo " オプション ( -out): $outstring" % csh csh211 -in aaa -out bbb オプション ( -in): aaa オプション ( -out): bbb % csh csh211 aaa bbb -out ccc オプション ( -in): aaa bbb オプション ( -out): ccc % csh csh211 -out aaa bbb -in ccc オプション ( -in): ccc オプション ( -out): aaa bbb % csh csh211 利用法 : % csh211 -in 文字列 -out 文字列 - 3 -

課題 3 : 複数のファイルから与えられたパターンとマッチする文字列を含む行を取り出せ ただし パターンは ' で囲むこと 利用法 : % csh311 パターンファイル名ファイル名 シェルプログラム (csh311) 2 # << csh311 >> 3 # 引数に対する処理 4 if( $#argv <= 1 ) then 5 echo " 利用法 : % csh311 パターンファイル名ファイル名 " 8 # パターンを取り出す 9 set pat = $1 10 shift argv 11 # 引数に指定されたすべてのファイルに付いて繰り返す 12 while( $#argv > 0 ) 13 if(! -e $1 ) then 14 echo " ファイル [$1] は存在しません " 15 goto fin 16 endif 17 # ファイル名の出力 18 echo "[$1]" 19 # 見つかった行に行番号を付加するオプション ( -n) 20 grep -n "$pat" "$1" 21 fin: 22 shift argv 23 end % cat aaa line1 line2 line3 % cat bbb LINE1 LINE2 LINE3 LINE4 LINE5 % csh csh311 '3' aaa bbb [aaa] 3:line3 [bbb] 3:LINE3 isemba@hcs[14]:csh csh311 利用法 : % csh311 パターンファイル名ファイル名 - 4 -

課題 4 : ファイルをコピーせよ 利用法 : % csh411 コピー元ファイル名コピー先ファイル名 ( ヒント ) コピー元ファイルの存在 コピー先ファイルの存在を確認してから適切な処理をすること ファイルの状態を調べる方法 書き方 機能 -d ファイル名 ディレクトリファイルの場合に真 -e ファイル名 ファイルが存在している場合に真 -f ファイル名 通常のファイルの場合に真 -r ファイル名 ファイルが読み出し可の場合に真 -w ファイル名 ファイルが書込み可の場合に真 -x ファイル名 実行ファイルの場合に真 -z ファイル名 ファイルが存在して空の場合に真 シェルプログラム (csh411) 2 # << csh411 >> 3 # 引数に対する処理 4 if( $#argv == 0 ) then 5 echo " 利用法 : % csh411 コピー元ファイル名 コピー先ファイル名 " 8 # コピー元ファイルが存在しない場合の処理 9 if(! -e $1 ) then 10 echo " コピー元ファイルが存在しません " 11 exit(0) 12 endif 13 # コピー先ファイルが存在する場合の処理 14 if( -e $2 ) then 15 echo " コピー先ファイルが存在します " 1 1 18 # awkコマンドによるコピー 19 awk '{print $0}' $1 > $2 % cat aaa line1 line2 line3 % csh csh411 ccc ddd コピー元ファイルが存在しません % csh csh411 aaa bbb コピー先ファイルが存在します % csh csh411 aaa ccc % cat ccc line1 line2 line3-5 -

課題 5 : 標準入力からの入力をファイルに保存せよ 利用法 : % csh511 > コピー先ファイル名 シェルプログラム (csh511) 2 # << csh511 >> 3 # 引数に対する処理 4 if( $#argv!= 0 ) then 5 echo " 利用法 : % csh511 > コピー先ファイル名 " 8 while( 1 ) 9 # 標準入力からの入力 10 set input = $< 11 # ファイル中に改行コードのみの行 ( 見かけは空行となる ) があると 12 # ファイルの最後と解釈され終了する 13 if( $input == "" ) then 14 break 15 endif 16 # 標準出力へ出力 17 echo "$input" 18 end % csh csh511 > xxx 111 222 333 enter キーを押す % cat xxx 111 222 333-6 -

課題 6 : あるディレクトリの直下にあるファイルをすべて表示せよ ディレクトリが指定されない場合 現ディレクトリとする 利用法 : % csh611 ディレクトリ名 シェルプログラム (csh611) 2 # << csh611 >> 3 # 引数に対する処理 4 if( $#argv > 1 ) then 5 echo " 利用法 : % csh611 ディレクトリ名 " 8 # ディレクトリの確認 9 if( $1 == "" ) then 10 set dir = `pwd` 11 else 12 set dir = $1 13 if(! -d $dir ) then 14 echo "$dir はディレクトリではありません " 15 exit(1) 16 endif 1 18 # すべてのファイルを表示 19 foreach file ( `\ls $dir`) 20 echo $file 21 end % csh csh611 aaa bbb ccc csh111 csh211 csh311 csh411 csh511 csh611 xxx - 7 -

課題 7 : あるディレクトリ以下の木構造をスタックを使って表示せよ 利用法 : % csh711 ディレクトリ名 シェルプログラム (csh711) 2 # << csh711 >> 3 # 引数に対する処理 4 if( $#argv > 1 ) then 5 echo " 利用法 : % csh711 ディレクトリ名 " 8 # ディレクトリの確認 9 if( $1 == "" ) then 10 set dir = `pwd` 11 else 12 set dir = $1 13 if(! -d $dir ) then 14 echo "$dirはディレクトリではありません " 15 exit(1) 16 endif 1 18 # スタックの準備 19 set stack = $dir 20 # 木構造を探索する 21 while( $#stack > 0 ) 22 # スタックから要素を 1 つ取り出す 23 set x = $stack[1] 24 shift stack 25 # ディレクトリの場合 26 if( -d $x ) then 27 echo $x/ 28 foreach file ( `\ls $x` ) 29 # ディレクトリ内のファイルが連続するように stackに代入 30 set stack = ($x/$file $stack) 31 end 32 # 実行ファイルの場合 33 else if( -x $x ) then 34 echo $x\* 35 # 通常のファイルの場合 36 else if( -f $x ) then 37 echo $x 38 # その他のファイルの場合 39 else 40 echo $x ' 不明 ' 41 endif 42 end - 8 -

% csh csh711 DIRA DIRA/ DIRA/filea DIRA/DIRB/ DIRA/DIRB/fileb % ls -lr DIRA DIRA: 合計 8 drwxr-xr-x 2 isemba staff 4096 9 月 18 日 21:53 DIRB -rw-r--r-- 1 isemba staff 13 9 月 18 日 21:52 filea DIRA/DIRB: 合計 0 -rw-r--r-- 1 isemba staff 21 9 月 18 日 21:53 fileb - 9 -

課題 8 : コマンドを再帰的に呼び出すことができる 再帰動作の確認をせよ 利用法 : % csh811 5 シェルプログラム (csh811) 2 # << csh811 >> 3 if( $#argv!= 1 ) then 4 echo " 利用法 : % csh811 数値 " 5 exit(0) 6 endif 7 if( $1 == 0 ) then 8 exit(0) 9 else 10 echo "--->[$1]" 11 @ x = $1-1 12 csh811 $x 13 echo "<---[$1]" 14 endif % csh csh811 2 --->[2] csh811: アクセス権がありません <---[2] % chmod 755 csh811 % csh811 1 --->[1] <---[1] % csh811 2 --->[2] --->[1] <---[1] <---[2] % csh811 3 --->[3] --->[2] --->[1] <---[1] <---[2] <---[3] - 10 -

シェルプログラム (csh821) 途中結果を保存する方法 1 # << csh821 >> 2 if( $1 == 0 ) then 3 echo "sum=$2" 4 exit(0) 5 else 6 echo "--->[$1]" 7 if( $2 == "" ) then 8 @ sum = 1 9 else 10 @ sum = $2 + 1 11 endif 12 @ x = $1-1 13 csh821 $x $sum 14 echo "<---[$1]" 15 endif % chmod 755 csh821 % csh821 0 sum= % csh821 1 --->[1] sum=1 <---[1] % csh821 2 --->[2] --->[1] sum=2 <---[1] <---[2] % csh821 3 --->[3] --->[2] --->[1] sum=3 <---[1] <---[2] <---[3] - 11 -

課題 9 : 指定されたディレクトリ以下の木構造を表示 ( 再帰呼び出しによる ) せよ 利用法 : % csh911 ディレクトリ名 シェルプログラム (csh911) 2 # << csh911 >> 3 # 引数に対する処理 4 if( $#argv > 1 ) then 5 echo " 利用法 : % csh911 ディレクトリ名 " 8 # ディレクトリの確認 9 if( $1 == "" ) then 10 set dir = `pwd` 11 else 12 set dir = $1 13 if(! -d $dir ) then 14 echo "$dirはディレクトリではありません " 15 exit(1) 16 endif 1 18 # 木構造を探索する 19 foreach i (`/bin/ls $dir`) 20 # ディレクトリの場合 21 if( -d $dir/$i ) then 22 echo $dir/$i/ 23 csh911 $dir/$i 24 # 実行ファイルの場合 25 else if( -x $dir/$i ) then 26 echo "$dir/$i 実行ファイル " 27 # 通常のファイルの場合 28 else if( -f $dir/$i ) then 29 echo `file $dir/$i` 30 # その他のファイルの場合 31 else 32 echo "$dir/$i" 33 endif 34 end - 12 -

% chmod 755 csh911 % csh911 DIRA DIRA/DIRB/ DIRA/DIRB/fileb: ASCII テキスト DIRA/filea: ASCII テキスト % ls -lr DIRA DIRA: 合計 8 drwxr-xr-x 2 isemba staff 4096 9 月 18 日 21:53 DIRB -rw-r--r-- 1 isemba staff 13 9 月 18 日 21:52 filea DIRA/DIRB: 合計 0 -rw-r--r-- 1 isemba staff 21 9 月 18 日 21:53 fileb - 13 -

課題 1 0 : 指定されたディレクトリ以下の木構造を表示 ( 再帰呼び出しによる ) し 通常のファイルの場合 最初の 20 行を表示せよ また 不要なファイルは削除できること 利用法 : % csh1011 ディレクトリ名 2 # << csh1011 >> 3 # 引数に対する処理 4 if( $#argv > 1 ) then 5 echo " 利用法 : % csh1011 ディレクトリ名 " 8 # ディレクトリの確認 9 if( $1 == "" ) then 10 set dir = `pwd` 11 else 12 set dir = $1 13 if(! -d $dir ) then 14 echo "$dirはディレクトリではありません " 15 exit(1) 16 endif 1 18 # 木構造を探索する 19 foreach i (`/bin/ls $dir`) 20 # ディレクトリの場合 21 if( -d $dir/$i ) then 22 echo $dir/$i/ 23 csh1011 $dir/$i 24 continue 25 endif 26 # 実行ファイルの場合 27 if( -x $dir/$i ) then 28 echo $dir/$i\* 29 continue 30 endif 31 # 通常のファイルの場合 32 if( -f $dir/$i ) then 33 echo "[$dir/$i]" 34 head -20 $dir/$i 35 repeat 40 echo -n "=" 36 echo " " 37 echo -n " 続けますか [y/n/del]: " 38 set in = $< 39 if( $in == "n" ) then 40 break; 41 endif 42 if( $in == "del" ) then 43 \rm -i $dir/$i 44 endif 45 continue 46 endif 47 # その他のファイルの場合 48 echo $i ' 不明 ' 49 end - 14 -

% chmod 755 csh1011 ディレクトリ (DIRA) 以下を表示 % ls -R DIRA DIRA: DIRB filea DIRA/DIRB: fileb csh1011 を実行 % csh1011 DIRA DIRA/DIRB/ [DIRA/DIRB/fileb] 111 222 333 444 555 ======================================== 続けますか [y/n/del]: y [DIRA/filea] aaa bbb ccc ======================================== 続けますか [y/n/del]: del rm: DIRA/DIRB/filec を消去しますか (yes/no)? yes ディレクトリ (DIRA) 以下を表示 % ls -R DIRA DIRA: DIRB DIRA/DIRB: fileb - 15 -