担当:青木義満 yaoki@sic.shibaura-it.ac.jp 情報工学科 3年生対象 専門科目 システムプログラミング 第4, 5回 シェルプログラミング 担当:青木義満 yaoki@sic.shibaura-it.ac.jp.

Slides:



Advertisements
Similar presentations
1 ログイン ユーザ名: root パスワード: hosei (初期設定). 2 はじめに 対象 学部 1 年生 日時 毎週木曜 6 限 18 : 30 ~ 19:30 ( 初回のみ ~ 20 : 00) 開催場所 W211 各自持参するもの ノート PC LAN ケーブル.
Advertisements

Shell Script & gnuplot の 簡単な説明!! 日本大学文理学部情報システム解析学科 谷聖一 研究室 田中 勇歩 1.
システムプログラミング 情報工学科 篠埜 功 情報工学科 3 年生対象 専門科目 第5回 シェルスクリプトの続 き レポート課題 main 関数の引数 usage メッセージ.
5.制御構造と配列 場合分け( If Then Else , Select Case ) 繰返し( Do While ) 繰返しその2( For Next )
P HI T S スクリプト言語を用いた PHITS の連続 実行 Multi-Purpose Particle and Heavy Ion Transport code System title 年 2 月改訂.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
JavaScript プログラミング入門 2006/11/10 神津.
シェル シェルスクリプト 最低限vi 山下 達也 (北大理・宇宙理学専攻) INEX 第4回/最低限 UNIX(Linux) その3
シェル シェルスクリプト 最低限vi 山下 達也 (北大理・宇宙理学専攻) INEX 第4回/最低限 UNIX(Linux) その3
プログラミング言語としてのR 情報知能学科 白井 英俊.
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
Advanced Unix Commands
12.3,E,-15, 12.3,E5,+,=, >,<,…,
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
Lightweight Language Weekend ls-lRシェル
山田 由貴子 (北大理・地球惑星科学専攻) 2004年10月29日
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第1回 イントロダクション 担当:青木義満
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
条件式 (Conditional Expressions)
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
情報基礎A 第11週 プログラミング入門 VBAの基本文法3 配列・For~Next
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
スクリプト言語を用いたPHITSの連続実行
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング言語入門 手続き型言語としてのJava
Cプログラミング演習 中間まとめ2.
関数の定義.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
MATLAB測位プログラミングの 基礎とGT (2)
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
システムプログラミング 第3回、第4回、第5回、第6回 情報工学科 篠埜 功 makeコマンド 動的リンクライブラリ シェルスクリプト
Structured programming
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
UNIX演習 情報ネットワーク特論.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
コーパス言語学 ~バッチ処理~ 2013.10. 28.
プログラムの基本構造と 構造化チャート(PAD)
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
B演習(言語処理系演習)第2回 田浦.
情報とコンピュータ 静岡大学工学部 安藤和敏
UNIX演習 情報ネットワーク特論資料.
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
UNIX演習 情報ネットワーク特論資料.
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
プログラミングⅡ 第2回.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
情報処理Ⅱ 第7回 2004年11月16日(火).
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
情報処理Ⅱ 2005年11月25日(金).
場合分け(If Then Else,Select Case) 繰返し(Do While) 繰返しその2(For Next)
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第3回Bashゼミ for文処理について 発表者 直江 宗紀.
Presentation transcript:

担当:青木義満 yaoki@sic.shibaura-it.ac.jp 情報工学科 3年生対象 専門科目 システムプログラミング 第4, 5回 シェルプログラミング 担当:青木義満 yaoki@sic.shibaura-it.ac.jp

シェルとは? ユーザーとUNIXシステムの間のインタフェースとして機能するプログラム カーネルで行われる処理の細かな部分をユーザーから隠す役割 カーネル csh bash X Window その他の プログラム 表2.1

プログラミング言語としてのシェル シェルプログラム作成の2つの方法 対話的プログラムの例 コマンドを入力してシェルによって対話的に実行 コマンドをファイルに保存し,プログラムとして呼び出す 対話的プログラムの例 grep –l POSIX * | more POSIXというパターンに一致する内容を持つファイルの名前を出力 いつもコマンドを打つのは面倒 コマンドを保存したファイルを作成し,必要に応じて実行 “シェルスクリプト“

シェルプログラミングの利点 豊富なUNIXコマンド群を有効活用 例えば…. ディレクトリ内にある画像ファイル全てに対して,プログラムによりある処理を施したい ディレクトリ内にある画像ファイルのみを抽出,繰り返し演算 複数あるデータベースファイルから,ある特定の文字列を含むファイルのみを抽出してプログラムにより処理したい 文字列検索による該当ファイル抽出,繰り返し演算

シェルスクリプトの作成 コマンドを記述したファイル”first.sh”を作成 シェルスクリプトの実行 /bin/sh first.sh #This file looks through all the files in the current #directory for the string “yamada”, and then prints those #files to the standard output. for file in * do if grep -q yamada $file then more $file fi done exit 0

シェルの構文 シェルの持つ強力なプログラミング機能の学習 小さなプログラムの断片を対話的にテスト,大きなスクリプトに組み込める 構造化されたプログラムの作成 学習項目 変数:文字列,数値,環境,パラメータ 条件:シェルのブール型 プログラム制御:if, elif, for, while, until, case リスト 関数 ビルトインコマンド コマンドの結果の取得

シェルの変数 変数を宣言せずに使用 デフォルトでは,全ての変数が文字列型 大文字と小文字は区別(例:FOOとfooは別) 変数を最初に使用した時点で変数が作成 デフォルトでは,全ての変数が文字列型 大文字と小文字は区別(例:FOOとfooは別) 変数名の前に$文字をつけることで変数の内容を取得 echoコマンドで変数の内容を出力 変数に値を割り当てる場合以外には$をつける必要あり

変数の使用例 空白を含む文字列は引用符で囲む必要がある また,等号の両側に空白をいれてはいけない bash-2.05$ salutation=Hello bash-2.05$ echo $salutation bash-2.05$ salutation=“Yes Dear” bash-2.05$ salutation=7+5 空白を含む文字列は引用符で囲む必要がある また,等号の両側に空白をいれてはいけない

echo '$myvar' now equals $myvar #!bin/sh myvar="Hi there" echo $myvar echo "$myvar" echo '$myvar' echo \$myvar echo Enter some text read myvar echo '$myvar' now equals $myvar exit 0 read コマンド ユーザーが入力した文字列を取得 File name : read.sh /bin/sh read.sh

環境変数 いくつかの変数は,あらかじめ環境に含まれている値で初期化(環境設定) 大文字の変数 ユーザー定義変数→小文字で区別

パラメータ変数

例題)パラメータと環境変数 !/bin/sh salutation="Hello" echo $salutation echo "The program $0 is now running" echo "The second parameter was $2" echo "The first parameter was $1" echo "The parameter list was $*" echo "The user's home directory is $HOME" echo "Please enter a new greeting" read salutation echo "The script is now completed" exit 0 File name : parameter.sh /bin/sh parameter.sh ・・・・

条件 条件を調べ,その結果に応じて異なる処理をする機能 ◆test( [ ] )コマンド ファイルが存在するかどうか?  if test -f fred.c then ・・・・・・・ fi [ -f fred.c ] スペースが必要!

簡単なtestコマンドの使用例 #!/bin/sh if test -f fred.c then ファイル名: test.sh #!/bin/sh if test -f fred.c then echo "File fred.c exists." else echo "File fred.c not found." fi exit 0

testコマンドで使用できる条件

制御構造 ◆if ステートメント  使用方法 if condition then statements else fi

if コマンドの使用例 ファイル名:if1.sh #!/bin/sh echo "Is it morning? Please answer yes or no" read timeofday if [ $timeofday = "yes" ]; then echo "Good morning" else echo "Good afternoon" fi exit 0

Ifコマンド2 ファイル名:if2.sh !/bin/sh echo "Is it morning? Please answer yes or no" read timeofday if [ $timeofday = "yes" ]; then echo "Good morning" elif [ $timeofday = "no" ]; then echo "Good afternoon" else echo "Sorry, $timeofday not recognized. Enter yes or no" exit 1 fi exit 0

Ifコマンド3 ファイル名:if3.sh !/bin/sh echo "Is it morning? Please answer yes or no" read timeofday if [ “$timeofday” = "yes" ]; then echo "Good morning" elif [ “$timeofday” = "no" ]; then echo "Good afternoon" else echo "Sorry, $timeofday not recognized. Enter yes or no" exit 1 fi exit 0

繰り返し制御 for, while, case文(Cとは少し異なる) ◆forの構文 for variable in values do statements done 変数 任意の文字列集合 命令文

for文の使用例1 ファイル名:for1.sh #!bin/sh/ for name in aoki tokunaga ohzeki 43 do echo $name done exit 0

for文使用例2 (ワイルドカードの展開 重要) ファイル名:for2.sh #!bin/sh/ for file in $(ls *.sh); do echo $file done exit 0 ワイルドカード

While文 for文:一連の文字列を対象として繰り返し処理をするには便利.指定した回数だけコマンドを実行する場合は? また,繰り返す回数が不明の時は? 例:10回の繰り返し #!/bin/sh for foo in 1 2 3 4 5 6 7 8 9 10 do echo "here we go again" done exit 0 冗長な表現

While文の構文 ◆while while condition do statements done 繰り返しの条件 コマンド

while文使用例1 (パスワードの入力を求めるスクリプト) ファイル名:while1.sh #!bin/sh echo "Enter your password" read trythis while [ "$trythis" != "secret" ] do echo "Sorry, try again" done echo "Login succeeded." exit 0

while文の使用例2 (繰り返しの実行) ファイル名:while2.sh #!/bin/sh i=1 while [ "$i" -le 10 ] do echo "Loop number : $i" i=$(($i+1)) done exit 0

case文 ◆case case variable in pattern | pattern | …. ) statements1;; ….. esac

case使用例1 (ユーザーからの入力) ファイル名:case1.sh #!/bin/sh echo "Is it morning? please answer yes or no" read timeofday case "$timeofday" in "yes") echo "Good morning";; "no") echo "Good afternoon";; "y") echo "Good morning";; "n") echo "Good afternoon";; *) echo "Sorry, answer not recognized.";; esac exit 0;

case使用例2 (パターンをまとめる) ファイル名:case2.sh #!/bin/sh echo "Is it morning? please answer yes or no" read timeofday case "$timeofday" in "yes" | "y" | "Yes" | "YES") echo "Good morning";; "no" | "n" | "No" | "NO") echo "Good afternoon";; *) echo "Sorry, answer not recognized.";; esac exit 0;

case使用例3 (複数ステートメントの実行) ファイル名:case3.sh #!/bin/sh echo "Is it morning? Please answer yes or no" read timeofday case "$timeofday" in "yes"|"y"|"Yes"|"YES") echo "Good Morning" echo "Up bright and early this morning" ;; [nN]* ) echo "Good Afternoon" *) echo "Sorry, answer not recognized" echo "please answer yes or no" exit 1 esac exit 0

シェルスクリプト演習問題 ディレクトリ内のファイルの中から,拡張子が*.txtのファイルのみを表示し,その個数を表示するシェルスクリプトを作成せよ

リスト(And と Or) ANDリスト Orリスト statement1 && statement2 && statement3 … 左から順に実行(falseとなるまで) Orリスト statement1 || statement2 || statement3 … 左から順に実行(trueとなるまで)

リストの例 And Or #!/bin/sh touch file_one rm -f file_two if [ -f file_one ] && echo "hello" && [ -f file_two ] && echo "there" then echo "in if" else echo "in else" fi exit 0 #!/bin/sh rm -f file_one if [ -f file_one ] || echo "hello" || echo "there" then echo "in if" else echo "in else" fi exit 0

関数 関数の定義 function_name( ){ statements } #!bin/sh foo(){ echo "Function foo is executing" } echo "script starting" foo echo "script ended" exit 0 簡単な関数の 使用例 (func1.sh)

ローカル変数の使用 #!/bin/sh sample_text="global variable" foo(){ local sample_text="local variable" echo "function foo is executing" echo $sample_text } echo "script starting" foo echo "script ended"

関数の使用例 #!/bin/sh echo "Original parameters are $*" yes_or_no(){ echo "Parameters are $*" while true do echo "Enter yes or no" read x case "$x" in y | yes ) return 0;; n | no ) return 1;; * ) echo "Answer yes or no" esac done } echo "Original parameters are $*" if yes_or_no "Is your name $1" then echo "Hi $1" else echo "Never mind“ fi exit 0

配列について 以下の説明を参照 http://www.not-enough.org/abe/manual/unix2-ad99/array.html

シェルプログラミング 演習課題 1.ファイル名をシェルの引数[filename]で与え, シェルプログラミング 演習課題 1.ファイル名をシェルの引数[filename]で与え, % /bin/sh judge.sh [filename] ・そのファイルが存在すれば,ファイルの中身を表示する ・存在しない場合には,  "WARNING! No such file [filename]" と表示し, "Enter Filename: " として再度ファイル名の入力を促し,判定を繰り返すシェルプログラムを作成せよ。 2.1のプログラムに,引数の個数チェックを行う処理を追加せよ。 例) % /bin/sh judge.sh → 引数は0 この場合の実行結果 Wrong number of arguments. Usage:/bin/sh judge.sh filename となるようにせよ。

シェルプログラミング 演習課題 3.テキストファイルからのキーワード抽出プログラム シェルプログラミング 演習課題 3.テキストファイルからのキーワード抽出プログラム テキストファイルから,指定した文字列を含む行を探し出して表示するシェルプログラムを作成せよ。 テキストファイルは各自適当なものを作成 実行例) Enter filename: datafile.txt ←キーボード入力 Enter keyword: Aoki ←キーボード入力 Yoshimitsu Aoki ←結果の出力 4.特定ファイルバックアッププログラム ディレクトリ内のファイルの中から,Cソースファイル(*.c)のみファイルをコピーしてバックアップファイル(*.c.bak)を作成するシェルプログラムを作成せよ。

シェルプログラミング 演習課題 5.ディレクトリ内のファイル名全てを表示し, それぞれのファイルについて, と表示するプログラムを作成せよ。 シェルプログラミング 演習課題 5.ディレクトリ内のファイル名全てを表示し, それぞれのファイルについて, *.c であれば ”C source file” *.sh であれば ”Shell script file” *.txt であれば”Text file” 上記以外であれば,”else” と表示するプログラムを作成せよ。 (それぞれの種類のファイルが何個ずつ存在するかも表示せよ。)

システムプログラミング シェルプログラミング演習 課題提出方法 ・【課題1~5 】のシェルスクリプト(kadai1~5.sh)を以下の要領にて提出すること ・提出先:yaoki@sic.shibaura-it.ac.jp ・提出期限:11/6(火)授業開始前まで ・メールの題名を  system3 学籍番号 苗字 とすること! 例) system3 L01001 aoki