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

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

プレポスト【解説】

unix15-script2_09.key

PowerPoint プレゼンテーション

PowerPoint Presentation

初心者用

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

syspro-0405.ppt

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

PowerPoint Presentation

プログラミング入門1

Microsoft PowerPoint - 16comp-int7-tool-sh-v2.pptx

Microsoft PowerPoint - enshu4.ppt [äº™æ‘łã…¢ã…¼ã…›]

160420c_unix.pptx

JavaプログラミングⅠ

Si 知識情報処理

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

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

_unix_text_command.pptx

Python の基本事項の学習 このラーニングラボでは Python のシンタックス ( 構文 ) スコープ ( 有効範囲 ) 変数 演算子 単純な条件分岐の基本事項を学習します 目標 所要時間 :45 分 Python の基本的なインデントとスコープを理解しよう 変数の割り当て方法と使用方法を学習


PowerPoint プレゼンテーション

メソッドのまとめ

Microsoft PowerPoint - Prog05.ppt

JavaScriptで プログラミング

OpenFOAMユーザーのためのシェルスクリプト入門

02: 変数と標準入出力

PowerPoint Presentation

PowerPoint プレゼンテーション

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

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

PowerPoint プレゼンテーション

Taro-Basicの基礎・条件分岐(公

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

ガイダンス

slide5.pptx

Microsoft Word - VBA基礎(3).docx

170420_unix.pptx

プログラミングA

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

Microsoft PowerPoint - kougi4.ppt

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

プログラミング基礎

cp-7. 配列

02: 変数と標準入出力

Java講座

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

I117 II I117 PROGRAMMING PRACTICE II SCRIPT LANGUAGE 1 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara

_Vol17No4.indd

プログラミングA

スライド 1

Microsoft PowerPoint - ruby_instruction.ppt

Microsoft Word - 3new.doc

Microsoft Word - CygwinでPython.docx

言語プロセッサ2005 -No.6-

レポートでのデータのフィルタ

Microsoft PowerPoint - prog03.ppt

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

memo

OWI(Oracle Wait Interface)の概要

レポートのデータへのフィルタの適用

01: 講義概要

プログラムの基本構成

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

Microsoft PowerPoint - kougi6.ppt

memo

3. 標準入出力

プログラミング基礎

フィルタとは

Linux サーバー構築 LINUX サーバー構築目次... 1 第 1 章 LINUX のインストール... 6 第 1 節 CentOS とは... 6 第 1 項 CentOS とは... 6 第 2 節 CentOS インストールの準備... 6 第 1 項 iso ファイルの入手... 6

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

Prog1_3rd

初歩のC言語ターミナル_2014_May.pages

Microsoft PowerPoint - 13Kadai.pptx

Microsoft PowerPoint - C_Programming(3).pptx

Boost.Preprocessor でプログラミングしましょう DigitalGhost

PowerPoint Presentation

ポインタ変数

k_seminar_hands_on_for_linux_beginner.pptx

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

CM-3G 周辺モジュール拡張技術文書 INA226センサ(電流、電圧、電力)

リスト 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=

スライド 1

TC5.ids

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

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

How_to_use_integritycheck

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

Microsoft Word - DF-Salford解説09.doc

Webデザイン論

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

CLUSTERPRO for Linux PostgreSQL HowTo

Microsoft Word - no103.docx

Microsoft PowerPoint - Compiler03note.pptx

ネットワークシステム管理 #01

Transcription:

シェルプログラミング コマンドをパイプでつなげるだけでは済まないような ある程度まとまった処理を複数のコマンドを制御構文を用いたりしてファイルとしたものを ( シェル ) スクリプトと呼ぶ シェルプログラム バッチなどともいう.bash_profile もシェルスクリプトなので このファイルを解読したい 163 どのシェルを使うか? シェルスクリプトは どのシェル用のものかということで書き方 ( 文法 ) が異なる bash 特有の文法を学ぶよりは bashのもとになったsh シェル (Bourne shell) 用の文法を取り上げよう (bashはgnuプロジェクトがshと互換性を持たせ 機能を強化したシェル 164 bourne again shell の意味 ) 1

( 例 ) 以前のクイズで 単語ファイルの真ん中の語を求めたが 1. ファイルに単語がいくつあるか? 2. 真ん中の単語は何番目に当たるか? 3. その単語は何か? という 3 つの処理が必要だった これを行うシェルスクリプトを作ってみよう 165 シェルスクリプトの作成手順 1. シェルスクリプトをテキストエディタを使って作成する 2. 作成したスクリプトを実行可能ファイルにする 3. スクリプトの動作確認を行う 4. 動作確認でエラーが出れば修正する 166 2

基本事項シェルスクリプトの形式 $ sh ファイル名でも起動できるが 大抵は次のようにする ファイルの最初に #!/bin/sh を書き 使用するシェルを明示する 処理は左から右 上から下へ進む ( 例 ) 次の内容のファイル hello.sh を作る #!/bin/sh # # で始まる行はコメント echo Hello, World 167 このファイルを ls l で見ると - r w - r - - r - - 1 fr0123 hello.sh のようになっているので 実行権を $ chmod +x hello.sh のようにして与える ( これをしないと許可がありませんといわれて 実行できない ) 実際に実行するには $./hello.sh または hello.sh と打つ ( コマンドサーチパスにカレントディレクトリが入っているかどうかです! ) 168 3

シェル変数 代入 variable=value 変数名 variable に値 value を代入する variable の変数がない時は作られる = の前後に空白を入れてはいけない 参照 $variable 変数の削除 unset variable 169 $ w=/usr/local $ echo $w /usr/local $ ls $w ( 略 ) $ unset w $ シェル変数の操作例 170 4

ワードリストを値とするシェル変数 スペースで区切られた文字列の並びを変数の値としたいときは $ w=(/usr /usr/bin /usr/local) のように値の部分を丸括弧で囲む 値全体を参照するときは $ echo ${w[@]} 個々の要素を参照するときは $ echo ${w[0]} ${w[1]} ${w[2]} のようにする 171 バッククォートによるコマンド置換 バッククォート ( アポストロフィと向きが逆のもの ) で囲まれた場合 その中に書かれたコマンドを実行し その結果をその位置に埋め込む ( 例 ) $ echo Today is `date` $ w= Today is `date` ( 注意 ) このようにバッククォートはアポストロフィと意味が全然違うので き 172 ちんと使い分けること! 5

数値と文字列 sh のデータ形式 : 基本的に文字列 計算が必要な時 : `expr 数式 ` 注意 : 数式の各要素は空白で区切る ( 例 ) $ echo `expr 2 + 3` $ echo `expr 2 * 3-1` $ echo `expr ( 2 + 4 ) / 5` $ echo `expr 4 % 2` 173 辞書の真ん中の語を求めるシェルスクリプトを作ってみよう 1. まず変数 dictwc に辞書のサイズを求める #!/bin/sh dictwc= ` look. wc -l` 2. dictwc の半分 ( 真ん中 ) を求める mid=`expr $dictwc / 2 + 1` 3. 真ん中の語が何番目なのかとその単語を表示する echo -n $mid/ $dictwc = echo `look. head -$mid tail -1` 174 6

前スライドの欠陥 辞書が偶数個の単語から構成されるときは まちがった結果を表示してしまう 偶数個の時は 真ん中の 2 個の単語を表示させたい 奇数個の時と偶数個の時で処理を分ける 175 辞書が偶数個でも大丈夫なように書くと #!/bin/sh dictwc=`look. wc -l` if [ `expr $dictwc % 2` -ne 0 ]; then Nth=`expr $dictwc / 2 + 1` echo ` look. head -$Nth tail -1` else Nth=`expr $dictwc / 2` echo ` look head -$Nth tail -1` Nth=`expr $NTH + 1 ` echo ` look. head -$Nth tail -1` fi 176 7

if の書き方 1 if [ 条件 1 ] then コマンド列 1 elif [ 条件 2 ] then コマンド列 2 else コマンド列 3 fi 177 if の書き方 2 if [ 条件 1 ] ; then コマンド列 1 elif [ 条件 2 ] ; then コマンド列 2 else コマンド列 3 ; fi ( つまり then, else, elif, fi はセミコロンを使って同じ行に書くことができる ) ( 注 ) [ と条件の間にはスペースを入れる 178 8

if の書き方 3 if test 条件 1 then コマンド列 1 elif test 条件 2 then コマンド列 2 else コマンド列 3 fi 179 数値比較演算子 表記 a -eq b a -ne b a -gt b a -lt b a -ge b 意味 Equal to not equal to Greater than Less than greater than or equal to a -le b less than or equal to 180 9

論理演算子 表記意味例! expr Expr でなければ真 ( 否定 ) expr1 -a expr2 expr1 かつ expr2 が成り立てば真! -r file.txt (file.txt が読み込み可能でなければ真 ) $a -eq 1 -a $b -eq 10 expr1 -o expr2 expr1 または expr2 が成り立てば真 $a -eq 1 -o $b -eq 10 181 パターン比較演算子 表記 string = = pattern string!= pattern 意味 文字列 stringと文字列 patternが等しければ真文字列 stringと文字列 patternが等しくなければ真 182 10

ファイル属性演算子 -r filename ファイルが読めれば真 -w filename ファイルが書ければ真 -x filename ファイルが実行可能ならば真 -e filename ファイルが存在すれば真 -O filename そのシェルスクリプトを実行したユーザが filename の所有者であるとき真 -f filename ファイルが通常のファイルなら真 -d filename ファイルが存在しディレクトリなら真 183 ファイル関係演算の例 #!/bin/sh # カレントディレクトリにファイルa.outが存在し, # 実行可能なら実行 if [ -f./a.out -a -x./a.out ] ; then./a.out else echo a.out not found fi 184 11

コマンドのグループ化 現在のシェルの子プロセス ( サブシェル ) として実行される cmd1; cmd2 コマンドcmd1の後にコマンドcmd2を実行 ( cmd1; cmd2 ) cmd1とcmd2をコマンドグループとして実行 cmd1 && cmd2 cmd1が成功したらcmd2を実行 cmd1 cmd2 cmd1が失敗したらcmd2を実行 185 グループ化されたコマンドの例 コンパイルが成功した時だけ,./a.out を実行 $ gcc test.c &&./a.out カレントディレクトリを変えずに実行 $ ( cd prog1; ls ) 186 12

繰り返し処理 for for 変数 in 単語リスト do コマンド列 done ( 注 ) for 変数 in 単語リスト ; do コマンド列 ; done も可 187 #!/bin/sh for i in *.c do rm -i $i done for の例 188 13

繰り返し処理 while while 条件 do コマンド列 done ( 注 ) while 条件 ; do コマンド列 ; done も可 189 while の例 #!/bin/sh i=1 a=0 while [ $i -le 3 ] do a=`expr $a + $i` echo $i $a i=`expr i + 1` done 190 14

もっと勉強したい方は ブリン著 入門 UNIX シェルプログラミング ソフトバンク Robbins & Beebe 著日向あおい訳 詳解シェルスクリプト オライリー ジャパン など 191 15