PowerPoint プレゼンテーション

Similar documents
PowerPoint プレゼンテーション

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

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

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

PowerPoint Presentation

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

スライド 1

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

PowerPoint Presentation

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

基本的な利用法

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

プレポスト【解説】

ガイダンス

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

1. はじめに 1. はじめに 1-1. KaPPA-Average とは KaPPA-Average は KaPPA-View( でマイクロアレイデータを解析する際に便利なデータ変換ソフトウェアです 一般のマイクロアレイでは 一つのプロー

How_to_use_integritycheck

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

PowerPoint プレゼンテーション

_unix_text_command.pptx

Si 知識情報処理

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

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

初心者用

PowerPoint Presentation

unix15-script2_09.key

Microsoft Word - CygwinでPython.docx

PowerPoint プレゼンテーション

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

スライド 1

JavaプログラミングⅠ

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

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

k_seminar_hands_on_for_linux_beginner.pptx

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

フィルタとは

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

目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール

スクールCOBOL2002

<4D F736F F D20837D836A B5F93C192E88C AC888D593FC97CD5F2E646F63>

PowerPoint Presentation

ユーザーズマニュアル 神戸親和女子大学情報処理教育センター 年 4 月版

プログラミング実習I

0_テキストマイニング環境構築_mac

JavaScriptで プログラミング

サイボウズ Office 7 デザインギャラリーマニュアル

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

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

slide5.pptx

Microsoft PowerPoint - InfPro_I6.pptx

<4D F736F F D208AC888D B836A F C B838B834B E74752E646F63>

次の病院 薬局欄は 氏名 欄に入力された値によって入力すべき値が変わります 太郎の行く病院と花子の行く病院が必ずしも同じではないからです このような違いを 設定 シートで定義しておきましょう 太郎の行く病院のリストを 太郎 花子の行く病院のリストを 花子 として 2 つのリストが定義されています こ

PowerPoint プレゼンテーション

Microsoft Word A02

Rインストール手順

PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

再起動した状態になり パスワードを入力すると 図 2 のように DEXCS2011 のアイコ ンがデスクトップ上に表示される 2 端末を準備する メニューバーにある端末の形を左クリック 図 2 デスクトップ メニューバーに端末の形がない場合 図 3 メニューバー アプリケーション アクセサリー 端末

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

目次 新規ユーザー登録... 3 初期設定... 6 (1) 特定商取引法に基づくページのURLを設定する... 7 (2) コンバージョン測定タグを設定する... 7 サイトを作成してみよう

GSLetterNeo vol 年 7 月 形式手法コトハジメ TLA + Toolbox を使って (2)- 熊澤努 sra.co.jp はじめに GSLetterNeo Vol.130 で TLA + Toolbox を紹介しました 今回からより詳しく T

スライド 1

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

厚生労働省版ストレスチェック実施プログラムバージョンアップマニュアル (Ver2.2 から Ver.3.2) 目次 1. プログラム概要 バージョンアップ実施手順 要注意 zip ファイル解凍の準備 Windows によって PC が保護されました と

基本的な利用法

OS

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

スライド 1

Javaプログラムの実行手順

PowerPoint プレゼンテーション

ClearCase - SD4_JP

整理番号変換ツール 操作説明書 平成 20 年 11 月 厚生労働省保険局調査課

PowerPoint プレゼンテーション

Windows10の標準機能だけでデータを完全バックアップする方法 | 【ぱそちき】パソコン初心者に教えたい仕事に役立つPC知識

PowerPoint プレゼンテーション

Microsoft Word Proself-guide4STD+Prof.docx

160420c_unix.pptx

スライド 1

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

ポインタ変数

Copyright 2014 NTT DATA Corporation 2 INDEX 1. 一括請求 Assist とは 1-1. でんさいに係るサービスの関係性 1-2. 一括請求 Assist の必要性 1-3. 一括請求 Assist の特長 2. 機能紹介 2-1. 一括請求 Assist

Exam : 日本語 (JPN) Title : LPI Level 1 Exam 101, Junior Level Linux Certification, Part 1 of 2 Vendor : Lpi Version : DEMO 1 / 4 Get Latest & Va

fs.ppt

Microsoft Word - DF-Salford解説09.doc

syspro-0405.ppt

日医特定健康診査システム ORCA PROJECT Linux 対応版インストールマニュアル (Version 対応 ) Ubuntu Trusty 用 版 2017 年 2 月 23 日 Copyright (C) Japan Medical

このうち ツールバーが表示されていないときは メニューバーから [ 表示 (V)] [ ツールバー (T)] の [ 標準のボタン (S)] [ アドレスバー (A)] と [ ツールバーを固定する (B)] をクリックしてチェックを付けておくとよい また ツールバーはユーザ ( 利用者 ) が変更

OWI(Oracle Wait Interface)の概要

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

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

目 次 1. はじめに ソフトの起動と終了 環境設定 発助 SMS ファイルの操作 電話番号設定 運用条件 回線情報 SMS 送信の開始と停止 ファイル出力... 16

Eclipse マニュアル <作成目的> Eclipse のインストール方法などを紹介したページはいろいろありますが 専門用語がわからない初心者でもわか りやすく Eclipse のインストール方法 基本操作などをまとめたマニュアル作成を目的としています <目次> 1 Eclipse のインストール

PowerPoint プレゼンテーション

引き算アフィリ ASP 登録用の日記サイトを 作成しよう Copyright 株式会社アリウープ, All Rights Reserved. 1

Microsoft PowerPoint - prog04.ppt

Excel2013 マクロ

POWER EGG V2.01 ユーザーズマニュアル 汎用申請編

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

Transcription:

V1 シェルスクリプト入門

本講義にあたって テキストが穴埋めになっています 埋めて完成させてください クイズがたくさんあります めざせ全問正解 実習がたくさんあります とにかく書いてみるのが理解の早道です 2

シェルスクリプトが導く 明るい未来 3

シェルスクリプトが導く明るい未来 あなたは解析担当者です 今は朝の10時です 共同研究者から一本の電話がかかって きました 例の解析結果が急に必要になったので 今日の18時までに送ってもらえる 4

シェルスクリプトが導く明るい未来 無理だ... 5

シェルスクリプトが導く明るい未来 その解析はA,B,Cという3つのソフトを 順番に実行する必要があるのですが... A終わった B実行 A実行 A実行 (2時間) B終わった C実行 B実行 (3時間) C実行 (2.5時間) 6

シェルスクリプトが導く明るい未来 今日に限って会議が2つも入っています 10 11 12 13 14 15 16 会議 A実行 (2時間) 17 会議 B実行 (3時間) 18 19 飲み会 C実行 (2.5時間) 期限 18時までに終えるのは 無理だ... 締め切りを20時まで伸ばしてもらえるかな 飲み会は諦めよう 7

シェルスクリプトが導く明るい未来 その時です 諦めないで シェルスクリプトを使えば 18時までに終わるよ 8

シェルスクリプトが導く明るい未来 シェルスクリプトのおかげであなたは 共同研究者の要望に応え 飲み会にも間に合いました 10 11 12 13 14 15 16 会議 A実行 (2時間) 17 会議 B実行 (3時間) 18 19 飲み会 C実行 (2.5時間) シェルスクリプト作成 9

シェルスクリプトを使うと 時間を効率的に使える! シェルスクリプトが導く明るい未来 完 10

本講義の内容 シェルスクリプトとは 文法の話 変数 引数 条件付き処理 繰り返し処理 標準出力と標準エラー出力 シバン 11

シェルスクリプトとは Linuxコマンド をファイルに書いたもの 書かれた内容をLinuxが自動実行 変数 条件付き処理 繰り返し処理 などのプログラミングが可能 12

シェルスクリプトのメリット 効率的に解析できる 指定通り自動で実行されるので 解析の待ち時間が減らせる 同じ処理を別のデータや異なる条件で繰り返し実行しやすい 実行ログを残しやすい まとめて実行 しておくね cd 実行 cd pwd ls pwd 実行 ls 実行 手入力で1つずつコマンドを 実行していたのを シェルスクリプトなら まとめて実行できる 13

シェルスクリプトの強み バイオインフォのソフトは日進月歩 しかし Linuxコマンドや シェルスクリプトの 文法はこの10年大きくは変わっていない つまり 一度身につければ長く使える 14

シェルとは ユーザが入力したコマンドをコンピュー タに伝えるプログラムです 再起動したまえ $ shutdown h now bash 再起動して zsh などの 種類があります シェル 了解 スクリプト 15

シェルの種類 本テキストはzshをベースとした 記述になっていますがbashでも ほぼ同じ挙動になります BioLinuxはデフォルトがzshです 16

シェルスクリプトの作成と実行 1. テキストエディタ vi, gedit等 で 実行内容をファイルに書いて保存 テキストエディタの使いかたは資料末尾をご覧ください シェルスクリプトファイルは拡張子を.sh にします 2. shコマンドで実行 $ sh シェルスクリプトファイル名 17

実習環境 1. 仮想環境を起動します 2. デスクトップに sh ディレクトリを 作成します $ cd ~/Desktop $ mkdir sh $ cd sh 本日の実習はすべてこの中で行います 18

実習環境 テストデータ デスクトップの Sample Data から sh に 以下の2ファイルをコピーしてください../S だけ入力してTabキーを押すと Sample Data まで入ります $ cp../sample Data/peptide_seqs/p eptides_longer_headers.fasta. $ cp../sample Data/peptide_seqs/p eptides_short_headers.fasta. 改行を入れ ずに続けて 入力 改行を入れ ずに続けて 入力 どちらもFastaフォーマットのファイルです 19

Fastaフォーマット で始まるID行と配列行 塩基またはアミノ酸 から成るフォーマットです ゲノムや遺伝子の配列を表すのによく使われます ID行 >NP_571718.1 DRERSOX9A MNLLDPYLKMTDEQEKCLSDAPSPSMSEDSAGSPCPSASGSDTENTRPAENSLLAADGTLGDF 配列行 KKDEEDKFPVCIREAVSQVLKGYDWTLVPMPVRVNGSSKNKPHVKRPMNAFMVWAQAARRKLA DQYPHLHNAELSKTLGKLWRLLNEVEKRPFVEEAERLRVQHKKDHPDYKYQPRRRKSVKNGQS ESEDGSEQTHISPNAIFKALQQADSPASSMGEVHSPSEHSGQSQGPPTPPTTPKTDTQPGKAD LKREARPLQENTGRPLSINFQDVDIGELSSDVIETFDVNEFDQYLPPNG 20

本講義の達成目標 以下の作業をシェルスクリプトで 実行できるようになります Fastaファイルから指定した遺伝子の 配列だけを取り出す 21

ファイルの先頭を表示する Linuxのheadコマンドを実行すると 指定したファイルの先頭数行が head n k ファイル 表示されます ファイルの先頭k行を出力する $ head -n 4 peptides_short_headers.fasta >DRERSOX9A MNLLDPYLKMTDEQEKCLSDAPSPSMSEDSAGSPCPSASGSDTENTRPAENS FPVCIREAVSQVLKGYDWTLVPMPVRVNGSSKNKPHVKRPMNAFMVWAQAAR LGKLWRLLNEVEKRPFVEEAERLRVQHKKDHPDYKYQPRRRKSVKNGQSESE 先頭4行が表示される 22

実習1 次のシェルスクリプト test1.shを 書いて実行してみましょう peptides_short_headers.fastaファイルの先頭4行を表示するスクリプト $ gedit test1.sh test1.shにこの1行を書いて保存します head n 4 peptides_short_headers.fasta $ sh test1.sh 実行 23

質問 では もう一つのファイル peptides_longer_headers.fastaの 先頭8行を表示するようにするには スクリプトをどう変更すればよいで しょう 24

解答 実行内容を以下のように変えます head n 4 peptides_short_headers.fasta head n 8 peptides_longer_headers.fasta 25

こんなときはどうする ファイル名が何回も記載されていた場合は echo "peptides_short_headers.fastaの先頭 4行は " head n 4 peptides_short_headers.fasta echo "peptides_short_headers.fastaの末尾 4行は " tail n 4 peptides_short_headers.fasta echo "peptides_short_headers.fastaの行数 は " wc l peptides_short_headers.fasta : echo 値を出力する tail n k 末尾k行を出力する wc l 行数を出力する 直すの面倒くさい 直し忘れがありそう 26

変数 変数 を使うと値を一元管理できます FILE="peptides_short_headers.fasta" echo "$FILE の先頭4行は " head n 4 $FILE 変数 FILE に ファイル名を入れる echo "$FILE の末尾4行は " tail n 4 $FILE echo "$FILE の行数は " wc l $FILE : それ以降は $FILE と書くと 設定した値が 自動で入る 27

変数 変数 は値を格納するものです 入れた値は変更することができます 変数名=値 と書くと 変数に 値を代入できます 文字列はダブル クオート( )で囲みます $変数 と書くと 変数に入って いる値を呼び出すことができます 28

実習2 次のシェルスクリプト test2.shを 書いて実行してみましょう $ cp test1.sh test2.sh cp FileA FileB FileAをFileBという名前で複製 $ gedit test2.sh test2.shを以下のように変更して保存します file="peptides_short_headers.fasta" num=4 head n $num $file $ sh test2.sh 29

実習2 解答 実習1と同じ挙動になります file="peptides_short_headers.fasta" num=4 head n $num $file 1. 変数 file にファイル名を入れる 2. 変数 num に表示したい行数を入れる 3. headコマンドを$num, $fileを使って実行する 30

変数のありがたみがわかる例 変数を使わずに書いたスクリプトの例 echo "入力ファイルは A.fastq です" echo "A.fastq のマッピング開始" bwa mem genome A.fastq >out.sam echo "A.fastq のマッピング終了" : 何箇所も直さない といけない やっぱり A.fastqじゃなく B.fastqで 実行しよう 時間がかかる上に 直し忘れたりする 31

変数のありがたみがわかる例 変数を使って書いたスクリプトの例 file="a.fastq" echo "入力ファイルは $file です" echo "$file のマッピング開始" bwa mem genome $file >out.sam echo "$file のマッピング終了" : ここだけ 直せばよい 10秒で 直せます やっぱり A.fastqじゃなく B.fastqで 実行しよう 32

変数にしたほうがいいもの 実行のたびに変わる可能性のある値 例 入力ファイル名 スクリプト内に何度も登場する値 ゲノム配列の 例 ファイル名 なるべく変数にしておくと後で修正が しやすい 33

不満 対象ファイルが変わるたびに スクリプトファイル内の ファイル名の値を書き換えないと いけないのは面倒だなあ peptides_longer_headers.fasta file=peptides_short_headers.fasta num=4 head n $num $file 引数 を使うと実行するファイル名 などを外から与えられるようになります 34

引数 ひきすう 引数 は実行時にスクリプト名以降に 入力された値 空白区切りで複数入力可 です $ sh test3.sh peptides_short_headers.fasta 4... 引数 引数の値は専用の変数に入ります 変数$1に1番目の値が $2に2番目の値が $3以下同様 入ります 35

実習3 次のシェルスクリプト test3.shを 書いて実行してみましょう $ cp test2.sh test3.sh $ gedit test3.sh 以下のように変更して保存 file=$1 num=$2 head n $num $file 引数にファイル名と 行数を指定して実行 $ sh test3.sh peptides_short_headers.fasta 4 36

実習3 解答 実習1 2と同じ挙動になります $ sh test3.sh peptides_short_headers.fasta 4 file=$1 num=$2 head n $num $file 1番目の値 peptides... が変数$1に 2番目の値 4 が変数$2に入ります 引数を変えると実行内容が変わります $ sh test3.sh peptides_longer_headers.fasta 10 37

難易度 Q1.sh クイズ 実行結果は どうなりますか v1=$1 v2=$2 v3=$3 基本です 理解できています 解けたらすごい echo $v2 $ sh Q1.sh I love bioinformatics A C I love bioinformatics love B D I bioinformatics 38

Q1.sh クイズ 正解は C v1=$1 v2=$2 v3=$3 echo $v2 love $ sh Q1.sh I love bioinformatics 1つ目の値 $1に入る 2つ目の値 $2に入る 3つ目の値 $3に入る 39

ディレクトリを作成する 以下は sun moon という名前の 2つのディレクトリを作成する シェルスクリプトです mkdir "sun" "moon" mkdir ディレクトリを作成する 40

実習4 次のシェルスクリプト test4.shを 書いて実行してみましょう "sun"と"moon"というディレクトリを作成する ディレクトリ名は引数で指定する $ sh test4.sh sun moon $ ls sunとmoonができていればok ls ファイルと ディレ クトリの一覧を表示 もう一度実行してみましょう $ sh test4.sh sun moon 警告が出るはずです 41

実習4 解答 dir1=$1 dir2=$2 mkdir $dir1 mkdir $dir2 $ sh test4.sh sun moon $ ls 同じコマンドを再実行すると警告が出ます mkdir: ディレクトリ 'sun' を作成できません: ファイルが存在します mkdir: ディレクトリ 'moon' を作成できません: ファイルが存在します 42

質問 ディレクトリが存在する場合に 警告を出さなくするには どうしたらいいの 条件付き処理 を用います 作ろうとする名前のディレクトリが 存在しない時のみmkdirするようにします 43

条件付き処理 条件を満たした時だけ処理を実行させ ることができます if [ 条件 ] then 処理 fi 半角スペースを入れる 実際は表示されない ここに空白がないと エラーになるので注意 処理文は少し行頭を下げる インデント と見やすい 44

ファイルFILが存在して かつ通常ファイルなら 条件付き処理 if [ -f FIL ] ファイル ディレクトリの存在確認 ファイルFILが存在すれば ファイルFILが存在して かつサイズが0でなければ if [ -e FIL ] if [ -s FIL ] ディレクトリDIRが存在すれば ディレクトリDIRが存在しなければ if [ -d DIR ] if [! -d DIR ] 45

実習5 次のシェルスクリプト test5.shを 書いて実行してみましょう 2つの好きな名前のディレクトリを作成する ディレクトリ名は引数で受け取る ディレクトリが存在しない場合のみmkdirする 同じコマンドを繰り返し実行しても 警告が出ないことを確認します 46

実習5 解答 1回目の実行 $ sh test5.sh DNA RNA dir1=$1 dir2=$2 if [! -d $dir1 ] then mkdir $dir1 fi if [! -d $dir2 ] then mkdir $dir2 fi DNAが存在しないので ifの中が実行される DNAができる RNAが存在しないので ifの中が実行される RNAができる 47

実習5 解答 2回目の実行 $ sh test5.sh DNA RNA dir1=$1 dir2=$2 if [! -d $dir1 ] then mkdir $dir1 fi if [! -d $dir2 ] then mkdir $dir2 fi DNAが存在するので ifの中が実行されない 警告が出ない RNAが存在するので ifの中が実行されない 警告が出ない 48

質問 条件付き処理では他に どんな条件が指定できるの 変数の値に応じた処理などが可能です 例 変数Aが100より大きければ 例 変数Bが"cancer"でなければ 49

条件付き処理 値の比較には 比較演算子 を使います 文字列の比較演算子 数値の比較演算子 A -eq B A -ne B A -lt B A -le B A -ge B A -gt B A Bなら A Bなら A Bなら A Bなら A Bなら A Bなら A=B AとBが 同じなら A!= B AとBが 異なれば 50

条件付き処理 変数を使った条件付き処理 変数TEMPERATUREが 30以上だったら TEMPERATURE=$1 if [ $TEMPERATURE -ge 30 ] then echo "Is it hot today?" fi Is it hot today? と出力 51

条件付き処理 複数の条件を 指定すること もできます elif は何回でも 記述可能 if [ 条件1 ] then 条件1を満たした時の処理 elif [ 条件2 ] then 条件1は満たさなかったが 条件2を満たした時の処理 else どの条件も満たさなかった 時の処理 fi 52

条件付き処理 複数の条件付き処理の例 TEMPERATURE=$1 if [ $TEMPERATURE -ge 30 ] then echo "Hot enough for you?" elif [ $TEMPERATURE -le 10 ] then echo "Cold enough for you?" else echo "It's a nice day today." fi TEMPERATUREが 30以上だったら TEMPERATUREが 10以下だったら TEMPERATUREが それ以外だったら 53

実行結果は どうなりますか 難易度 Q2.sh mkdir "dir3" cd "dir3" if [! -f "foo.txt" ] then touch "foo.txt" else echo "It already exists." fi 実行開始時点でdir3は存在しない ものとします $ sh Q2.sh クイズ A C It already exists. と 出力される dir3のみ作成される B D dir3と foo.txtが作成される エラーになる 54

クイズ 正解は B dir3と foo.txtが作成される Q2.sh mkdir "dir3" cd "dir3" if [! -f "foo.txt" ] then touch "foo.txt" else echo "It already exists." fi $ sh Q2.sh Q2.sh別解 mkdir "dir3" cd "dir3" if [! -f "foo.txt" ];then 右のようにIf文でセミコロン touch "foo.txt" を使うと1行に書くことができます else echo "It already exists." fi 55

実習5を再度見てみましょう dir1=$1 dir2=$2 if [!-d $dir1 ] then mkdir $dir1 fi if [!-d $dir2 ] then mkdir $dir2 fi なんとなく冗長な 感じがしませんか 56

不満 ディレクトリを100個作る場合は if [!-d $dir1 ] then mkdir $dir1 fi を100回 書かないといけなくて大変だ 繰り返し処理 を用いれば 何度も 実行する処理でも1回だけ書くだけで よくなります 57

繰り返し処理 繰り返し処理の構文 for 変数 in 値1 値2 値3 do 処理 done 58

繰り返し処理 繰り返し処理の例 1.txt 2.txt... 100.txt という名前のファイルをtouchコマンドで作成する for FILE in `seq 1 100` do touch $FILE".txt" done touch: ファイルを作成する `seq n m`: nからmまで1刻みの数 59

Q3.sh f1=$1 f2=$2 out=$3 クイズ 実行結果は どうなりますか 難易度 for f in $f1 $f2 do head -n 2 $f > $out done $ sh Q3.sh File1 File2 Out A C File1の先頭2行がOutに 出力される File2の先頭2行がOutに 出力される B D File1の先頭2行とFile2の 先頭2行がOutに出力される エラーになる 60

Q3.sh f1=$1 f2=$2 out=$3 クイズ 正解は C for f in $f1 $f2 do head -n 2 $f > $out done File2の先頭2行がOutに 出力される Q3.sh修正版 f1=$1 f2=$2 参考 ファイルに追記するには out=$3 >を>>にすると ファイル書き出しが追記になり for f in $f1 $f2 File1の先頭2行の次に do File2のf2の先頭2行が head -n 2 $f >> $out 出力されます done 61

実習6 次のシェルスクリプト test5.shを 書いて実行してみましょう 3つの好きな名前のディレクトリを作成する ディレクトリ名は引数で受け取る ディレクトリが存在しない場合のみmkdirする ディレクトリを作成する手順はfor文を使って 1回だけ記述する 62

実習6 解答例 dir1=$1 dir2=$2 dir3=$3 for dir in $dir1 $dir2 $dir3 do if [! -d $dir ] 何度も実行する処理だが then 書くのは一回だけなので楽 mkdir $dir fi 処理内容に変更があっても done ここだけ変更すればよい 63

もっと便利にする どのコマンドが実行されたか 実行結果が正しく終わったのか わかりづらいよ 実行コマンドをechoで出力すると 結果がわかりやすくなります file=$1 echo "$file のマッピング開始" bwa mem genome $file >out.sam $ sh bwa.sh B.fastq B.fastqのマッピング開始 echo "$file のマッピング終了" B.fastqのマッピング終了 64

もっと便利にする exitで処理を終了できます for i in `seq 1 10`;do echo $i if [ $i eq 3 ];then echo 'Duh!' exit fi done $ sh duh.sh 1 2 3 Duh! 65

標準出力と標準エラー出力 正常時の出力と エラー時の出力を 区別して出すことができます $ sh miso_soup.sh ネギを切りました 豆腐を切りました お湯が沸きました ネギと豆腐を投入しました エラー 味噌が見つかりません 終了します エラー時の出力は 区別できるように したい 66

標準出力と標準エラー出力 通常のechoの結果は 標準出力 へ 末尾に >&2 をつけてechoした結果 は 標準エラー出力 へ出力されます echo "OK!" echo "ERROR " >&2 標準出力へ 標準エラー出力へ 67

実習7 次のシェルスクリプト test7.shを 書いて実行してみましょう echo "I'm fine." echo "Something wrong." >&2 実行結果の違いを確認します どちらも画面に出力する $ sh test7.sh $ sh test7.sh 1>log 2>err $ sh test7.sh >logall 2>&1 標準出力はファイルlogへ 標準エラー出力はファイル errへ出力する どちらもファイルlogallへ 出力する 68

不満 他人のスクリプトはもちろん 自分で書いたスクリプトでも 後で読み返すと何をやっているのか わからなくなるよ 何をやっているかわかりやすくするため スクリプトに コメント を入れましょう 69

コメント #で始まる行はコメント扱いとなり 処理に影響しません # 日本語でお礼 echo "Arigatou" # 英語でお礼 echo "Thank you" コメント コメント 70

シバン スクリプトの1行目に以下を記述すると このファイルがシェルスクリプトである ことが明示的になります #!/bin/sh スクリプトの1行目に書く何で実行するかの 指定をシバンと言います これにより shコマンドなしでも 実行できるようになります $ chmod a+x test7.sh $./test7.sh chmod a+x 実行権限をつける 71

Q4.sh 難易度 #!/bin/sh クイズ echo echo echo exit echo 実行結果はどうなるで しょう "Humpty " "Dumpty " >&2 "sat on " "a wall" >&2 $ chmod a+x Q4.sh $./Q4.sh 2>egg.txt A C egg.txtに以下が出力される Humpty sat on egg.txtに以下が出力される Humpty Dumpty sat on a wall B D egg.txtに以下が出力される Dumpty エラーになる 72

解答 B 正解は #!/bin/sh echo echo echo exit echo "Humpty " "Dumpty " >&2 "sat on " 標準出力 標準エラー出力 標準出力 ここで終了 "a wall" >&2 73

cdbtools Fastaファイルを操作するソフトウェアです https://umbc.rnet.missouri.edu/resources/how2runcdbtools.html 以下の2コマンドからなります 1. cdbfasta Fastaにインデックスをつける 前準備 2. cdbyank Fastaから指定した配列を取り出す 実行例 peptides_short_headers.fastaからdrersox9aの配列を取り出す $ cdbfasta peptides_short_headers.fasta $ cdbyank -a 'DRERSOX9A' peptides_short_headers.fasta.cidx 74

最終課題 1/2 peptides_short_headers.fastaから DRERSOX9A遺伝子の配列だけを抜き出す $ grep '>' peptides_short_headers.fasta >DRERSOX9A >CAURSOX9A >OMYKSOX9 >OLATSOX9B >TNIGUnk >XTRPSOX9 >RRUGSOX9A >DRERSOX9B >CCARSOX9B >CAURSOX9B >TNIGUnm >ASTUSOX9 >HSAPSOX9 peptides_short_headers.fastaに 書かれている遺伝子名の一覧 >DRERSOX9A MNLLDPYLKMTDEQEKCLSDAPSPSMSEDSAGSPCPSASGSDTENTRPAENSLLAADGTLGDFKKDEEDK FPVCIREAVSQVLKGYDWTLVPMPVRVNGSSKNKPHVKRPMNAFMVWAQAARRKLADQYPHLHNAELSKT LGKLWRLLNEVEKRPFVEEAERLRVQHKKDHPDYKYQPRRRKSVKNGQSESEDGSEQTHISPNAIFKALQ QADSPASSMGEVHSPSEHSGQSQGPPTPPTTPKTDTQPGKADLKREARPLQENTGRPLSINFQDVDIGEL SSDVIETFDVNEFDQYLPPNGHQNAPYAGGYAAWMTKPQNGSPQSSQLTPLNPAEPDQPRTTHIKTEQLS PSHYNEQQGSPQHISYGSFNVQHLQHYSTSFPSITRAQYDYSDSHQGGASSYYTHAGGQSSGLYSTFSYM SSSQRPMYTPIADSTGVPSIPQSNHSPQHWDQQPVYTQLSRP 75

最終課題 2/2 次のシェルスクリプト test8.shを書いて実行します 1. Fastaファイル名をコマンドラインから引数で受け取り変数FASTAに入れる FASTA=$1 2. $FASTAの値をechoし 指定した値が入っていることを確認する echo $FASTA $ sh test8.sh peptides_short_headers.fasta まずはここまでやってみましょう 3. $FASTAに対し 以下のコマンドでインデックスを作成する cdbfasta $FASTA 4. 変数CIDX 変数OUTに以下の文字列を入れ echoで確認 CIDX="${FASTA}.cidx" 応用編 シバンをつける OUT="${FASTA}.sub.fasta" FASTAの存在確認を行い 存在 echo $CIDX, $OUT しない場合は標準エラー出力に エラーメッセージを出して終了する 5. $CIDXに対し 以下のコマンドで配列を取り出す 遺伝子名も引数で受け取るようにし cdbyank -a 'DRERSOX9A' -o $OUT $CIDX 別の遺伝子に変えて実行する 6. 3と5のコマンド文を実行前にechoする $ sh test8.sh peptides_short_headers.fasta Copyright Amelieff Corporation DRERSOX9A All Rights Reserved.>log 2>err 76

現在いる場所を確認する pwd 現在Linuxのどのディレクトリにいるか確認するには次のコマンドを 実行します $ pwd コマンドを入力した後 Enterキーを押すとコマンドが 実行されます デ ィ レ ク ト リ 内 を 確 認 す る l s 現在いる場所にどのようなファイル ディレクトリがあるか確認するには 次のコマンドを実行します $ ls -l -lをつけて実行するとlsだけを実行するより詳しい結果が 表示されます アクセス権限など -lを オプション と呼びます 他 の デ ィ レ ク ト リ に 移 動 す る c d 他のディレクトリに移動するには次のコマンドを実行します $ cd 移動先ディレクトリ コマンドとオプションの間 コマンドと値の間には 半角空白を1つ以上入れます 77

ディレクトリを作成する mkdir $ mkdir 移動先ディレクトリ フ ァ イ ル を 作 成 す る t o u c h $ touch 作成するファイル名 ファイルを閲覧するにはlessやmore ファイルを編集するにはgeditやviを使います フ ァ イ ル を 編 集 す る g e d i t $ gedit 編集するファイル名 ファイルが存在しない場合は新規作成されます GUI環境がない場合はviを使います 78

ファイルまたはディレクトリをコピーする cp $ cp ファイル名 ディレクトリ名 コピー先名 フ ァ イ ル ま た は デ ィ レ ク ト リ を 移 動 す る m v $ mv ファイル名 ディレクトリ名 コピー先名 ア ク セ ス 権 限 を 変 更 す る c h m o d $ chmod 付与する権限 ファイル名 ディレクトリ名 権限の例 755 全員に読み書き実行を許可 700 所有者のみに読み書き実行を許可 79

主な解凍コマンド 拡張子.tar.gz 圧縮形式 gzip コマンド $ tar zxvf ファイル名.tar.bz2 bzip2 $ tar jxvf ファイル名.gz gzip $ gunzip ファイル名 $ gzip -d ファイル名 $ bunzip2 ファイル名.bz2 bzip2.zip zip $ unzipファイル名.tar tar $ tar xvf ファイル名 $ bzip2 -d ファイル名 80

Linuxのテキストエディタ GUIのエディタとCUIのエディタがあります GUI Windows/Macソフトのように マウスで操作する 長所 Linux初心者にも操作が容易 短所 GUIがない環境では使えない CUI キーボードからコマンドで操作する 長所 GUIがない環境でも使える 短所 操作コマンドを覚える必要がある 81

gedit CentOSにはデフォルトでgeditというGUIエディタが入っています geditを起動するには $ gedit コマンドを実行します をクリックして 終了します 保存 をクリックして 保存します 82

vi CentOSにはデフォルトでviというCUIエディタが入っています viを起動するには $ vi コマンドを実行します viには2つのモードがあり モードを切り替えながら操作します 入力モード 文字を入力する コマンドモード 編集する 切り貼り ファイルの保存など コマンドモード 入力モード 83

vi 入力モードのコマンド Escキー コマンドモードに移行 コマンドモードのコマンド a 入力モードに移行 カーソルの右から入力 o 入力モードに移行 次の行の行頭から入力 x 1文字カット dd 今いる行をカット yy 1行コピー p カットした行をペースト [数字]g [数字]行に移動 G 最終行に移動 :%s/foo/bar/ 文字列置換 fooをbarに置換 84