生 物 信 息 学 Bioinformatics 巩晶 癌症研究中心 山东大学 医学院 2015.12.11
第九章 编程基础 网页制作
9.1 Linux系统 Linux 是什么? ----- Linux是一个操作系统! …… ……
可视化窗口操作 命令行操作
9.1.1 Linux系统 - 远程连接 Linux 远程连接 Linux 从Windows远程登录Linux: PuTTY:命令行操作 1 1. Host Name (or IP address) Eg. tollml.lrz.de Host name 1.51.215.28 IP address 2. User name 3. Password 1 2 3
远程连接 Linux 从Windows远程登录Linux: WinSCP:文件传递
9.1.1 Linux系统 - 远程连接 Linux 远程连接 Linux 从Linux远程登录另一个Linux: 终端(terminal)是向计算机发出命令的一个窗口。类似于Windows下的DOS命令窗口。 远程登录命令:ssh username@hostname 退出远程登录 将当前机器上的文件拷贝到另一机器上
9.1.2 Linux系统 - Linux基本命令 0. ls命令=Dos里的dir 几个基础的“热身”命令 1. 显示日期与时间的命令:date 2. 显示日历的命令:cal 3. 简单好用的计算器:bc +加,-减,*乘,/除,^指数,%余数 1/3为什么等于0?答:bc默认只输出整数部分 通过scale=number设定小数点后位数 输入quit退出 cal的语法:cal [[month] year]
9.1.2 Linux系统 - Linux基本命令 [Tab]键具有“命令补全”与“文件补齐”的功能。 重要的热键 输入ca,在a后紧接着按两次[Tab]键,则所有以ca开头的命令都被显示出来了。 输入ls .bash后按两次[Tab]键,则所有以.bash开头的文件名都会被显示出来。 想不起来完整的文件名或命令名时,输入开头的几个字母再按下[Tab]键,会自动帮你补齐或者给你足够的提示。好好利用[Tab]键,可以让你避免 很多输入错误的机会。 重要的热键
9.1.2 Linux系统 - Linux基本命令 [Ctrl]-c 命令终止按键 (Ctrl和c一起按) 重要的热键 出现一堆东西在刷屏 输入find /后,系统会开始跑一些东西,此时按下[Ctrl]-c组合键,命令立刻被终止了。 如果你在Linux下输入了错误的命令或参数,有的时候这个命令或程序会不停的运行,这个时候按[Ctrl]-c组合键就可以让当前的程序“停下来”。 注意:如果你正在运行比较重要的命令或程序,还是等它自己跑完了停下来再说吧,别随便用这个组合键,不然你的工作就白做了。 [Ctrl]-d 输入结束按键 (Ctrl和d一起按) 可以代替exit的输入。
9.1.2 Linux系统 - Linux基本命令 查命令,找“男人” 某个命令不会用,比如date,输入“man date”就会出现详细的命令说明。这个man是manual的简写。 按PgUp,PgDn上下翻页,按q退出
9.1.2 Linux系统 - Linux基本命令 目录与路径 几个常见的处理目录的命令: 用符号代表的特殊目录: . 代表此层目录 cd:切换目录 pwd:显示当前目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 用符号代表的特殊目录: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表“当前用户”所在的主文件夹 / 代表根目录 绝对路径:由根目录“/”写起 相对路径:不是由根目录“/”写起 仅输入cd,代表的就是“cd ~”的意思,即,回到自己的主文件夹。
9.1.2 Linux系统 - Linux基本命令 目录与路径 几个常见的处理目录的命令: cd:切换目录 pwd:显示当前目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 mkdir 加了 –p 这个参数后,可以自行创建多层目录。 rmdir 加了–p 这个参数后,可以连通上层“空的”目录一起删除。
9.1.2 Linux系统 - Linux基本命令 文件与目录管理 几个常见的命令: ls :查看文件与目录 参数: -a :全部的文件,连同隐藏文件(开头为.的文件)一起列出来 -A :全部的文件,连同隐藏文件,但不包括.与..这两个目录 -l :列出文件的详细信息,包括属性、权限、文件大小、日期等 -hl :等同于-l,只是文件大小以人类较易读的方式(GB,KB等)列出 -R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示 -S :以文件容量大小排序,ls默认以文件名排序 -t :以时间排序 ……
9.1.2 Linux系统 - Linux基本命令 文件与目录管理 几个常见的命令: cp :复制 -r :用于复制整个文件夹(包括文件夹里的内容) rm :删除 参数: -i :若目标文件已经存在,在删除时会先询问操作的进行 -r :用于删除整个文件夹(无论是否是空文件夹) (rmdir –p 只能删除空的文件夹)
9.1.2 Linux系统 - Linux基本命令 文件与目录管理 几个常见的命令: 把文件"test.txt"移动到文件夹"test1" mv :移动文件或更名 把文件"test.txt"移动到文件夹"test1" 将文件"test.txt"更名为"test1.txt" 复制文件"test1.txt",新文件为"test2.txt" 把文件"test1.txt"和"test2.txt"同时移动到文件夹"test2"里 1 2 3 4
9.1.2 Linux系统 - Linux基本命令 文件内容查阅 几个常见的命令: cat :将文件的第一行到最后一行连续显示在屏幕上。加参数"-n"可以 打印出行号,连同空白行也会有行号。 tac :与cat相反,将文件的最后一行到第一行反向在屏幕上显示出来。 more :一页一页翻动。空格:向下翻一页;回车:向下滚动一行;q: 退出。 less :一页一页翻动。空格:向下翻一页;PgDn:向下翻一页;PgUp: 向上翻一页;q:退出。 head :取出前面几行。默认情况显示前10行。加上参数"-n number" 可以显示前number行。 tail :取出后面几行。默认情况显示后10行。加上参数"-n number" 可以显示后number行。
9.1.2 Linux系统 - Linux基本命令 创建、修改一个纯文本文件 几个常见的命令: vi :程序编辑器 1. 2. 按"a",进入"Insert"模式,即输入模式。 3. 输入文本内容 4. 输入结束后,按"Esc",退出"Insert"模式。 5. 输入":wq"回车,保存退出。若只输入":q",则退出,不保存对文 件内容的更改。
9.2 Perl语言 什么是Perl语言 Practical Extraction and Report Language 直译语言(Interpreted Language) - 特别适合字符串(序列)处理和文件写入写出 - 全面支持正则表达式
9.2.1 Perl语言 - 基本语法 如何运行Perl程序 从Perl官网下载ActivePerl 从命令窗口运行Perl,比如window系统下的Dos命令窗口 创建一个文本文件,命名为script_name.pl 把下面这句话放到Perl程序的第一行 #!/usr/bin/perl 运行Perl程序 perl script_name.pl
9.2.1 Perl语言 - 基本语法 基本符号 每条语句后面必须有分号";" 注释前面加"#",只对单行有效 变量: 不用提前声明变量,随用随定义 不用定义变量的类型,赋值后,程序会自动判断 变量名区分大小写,以字母开头,不能有特殊字符 变量名前面加"$",用"="赋值,比如 $scalar = expression
9.2.1 Perl语言 - 基本语法 字符串上的引号 ’(单引号) 单引号里的内容完全逐字逐句地直译 ”(双引号) 变量和转义字符有延伸的含义 ` (反引号) 执行反引号中的命令,命令执行后的 输出结果将作为这个字符串的返回值 $output='Hello\nWorld!'; print $output; $output="Hello\nWorld!"; print $output; `java -version`;
9.2.1 Perl语言 - 基本语法 比较操作符 String Operation Arithmetic lt less than < gt greater than > eq equal to == le less than or equal to <= ge greater than or equal to >= ne not equal to != cmp compare, return 1, 0, -1 <=> 0 1 2 3 4 5 6 7 8 9 符号 A B C … X Y Z a b c … x y z 由 小 到 大
9.2.1 Perl语言 - 基本语法 逻辑操作符 Operator Operation ||, or logical or &&, and logical and !, not logical not xor logical xor a xor b = (a' and b) or (a and b')(a'为非a)
9.2.1 Perl语言 - 基本语法 字符串操作符 Operator Operation . string concatenation 字符串连接 x string repetition 字符串重复复制 .= concatenation and assignment 字符串连接并赋值 $string1 = "potato"; $string2 = "head"; $newstring = $string1 . $string2; #"potatohead" $newerstring = $string1 x 2; #"potatopotato" $string1 .= $string2; #"potatohead"
9.2.2 Perl语言 - 函数(Function) Perl函数用专门的名字定义,比如: print,chop,close 等 函数的参数以逗号相隔写在圆括号里 - 逗号是必须写的 - 圆括号不是必须写的 - 但是小心!不写圆括号很容易造成语句混乱
指令:length 语法:length($string) 说明:求出字符串$string的字节(bytes)值。 示例:$string="Perl5"; $size=length($string); #这时$size=5; 指令:substr 语法:substr($string,offset,length) offset代表起始字符的位置,length代表引用的字符串长度,如果省略length则代表从起始值到字符串的最后一个字符长度。而offset如果是负值的话,就会从字符串右边开始指定字符。(字符串中第一个字符的位置为0,不是1) 示例: $s=substr("perl5",2,2); #这时$s="rl"; $s=substr("perl5",2); #这时$s="rl5"; $s=substr("perl5",-2,2); #这时$s="er"; 指令:index 语法:index($string,$substring,position) $substring是要寻找的字符;position代表从哪一个位置开始寻找,假如省略position就从头开始找起。 说明:返回所要找寻的字符在一字符串$string中的位置,如果在字符串中找不到字符的话,则会返回-1这个值。 示例: $s=index("perl5","p"); #这时$s=0 $s=index("perl5","l",2); #这时$s=3 $s=index("perl5","pell"); #这时$s=-1
9.2.3 Perl语言 - 数组(Array) Array就是一个被命名了的list - 可以动态的赋值并被保存 - 起始元素的index为0 数组操作符 - @:一个数组或数组的一部分 - $:数组中的一个元素 例如: @arr = ("A", "T", "C", "G"); print $arr[2]; 打印2号元素的值 print @arr[1,3]; 打印1号到3号元素的值 print $arr[-2]; 打印从右往左数2号元素的值 print @arr; 打印array的reference地址 print “@arr”; 打印array中所有元素的值 $x = @arr; 返回array中元素的个数
指令:scalar 语法:scalar(@array) 说明:返回数组@array中的元素的个数。 示例:@back =("A","B","C"); $num=scalar(@back); #这时$num=3; 指令:reverse 语法:reverse(@array) 说明:将数组@array中的元素由后到前重新排列。 示例:@back=("A","B","C","D","E"); @back=reverse(@back); #这时@back=("E","D","C","B","A"); 指令:sort 语法:sort(@array) 说明:将数组中的元素由小到大排序,如果要由大到小排序的话,要加上reverse这个函数。 示例: @abc=("d","b","c","a"); @abc=sort(@abc); #这时@abc=("a","b","c","d"); @abc=reverse(sort@abc); #这时@abc=("d","c","b","a"); 指令:pop 语法:pop(@array) 说明:将数组(@array)的最后一个元素删除,并将删除的元素返回。 示例:@array=("one","two"); $rm=pop(@array); #这时@array=("one");而$rm="two";
指令:shift 语法:shift(@array) 说明:将数组@array的第一个元素删除,并将删除的元素返回。 示例:@array=("one","two"); $rm=shift(@array); #这时@array=("two");而$rm="one"; 指令:push 语法:push(@array,$newelement/@newarray) 说明:在数组@array的最后加新的元素到数组@array中。 示例:@array=("one","two"); push(@array,"three"); #这时@array=("one","two","three") 指令:unshift 语法:unshift(@array,$newelement/@newarray) 说明:在数组@array的第一个元素前附加新的元素到数组@array中。 示例:@array=("one","two"); unshift(@array,"three"); #这时@array=("three","one","two") 指令:join 语法:join($string,@array) 说明:在一数组@array的元素之间加上一指定的字符$string,并将结果返回。 示例:@array=("one","two","three"); $total=join(":",@array); 这时$total="one:two:three";
Array Example #!/usr/bin/perl # Simple List operations # Address an element in the list @stringInstruments = ("violin","viola","cello","bass"); @brass = ("trumpet","horn","trombone","euphonium","tuba"); $biggestInstrument = $stringInstruments[2]; print("The biggest instrument: ", $biggestInstrument, "\n"); # Join elements at positions 0, 1, 2 and 4 into a white-space delimited string print("orchestral brass: ", join(" ",@brass[0,1,2,4]), "\n"); ################################ @unsorted_num = ('3','5','2','1','4'); @sorted_num = sort( @unsorted_num ); # Sort the list print("Numbers (Sorted, 1-5): ", @sorted_num, Array Example #Add a few more numbers @numbers_10 = @sorted_num; push(@numbers_10, ('6','7','8','9','10')); print("Numbers (1-10): ", @numbers_10, "\n"); # Remove the last pop(@numbers_10); print("Numbers (1-9): ", # Remove the first shift(@numbers_10); print("Numbers (2-9): ", # Combine two ops print("Count elements (2-9): ", scalar( @numbers_10 ),
9.2.4 Perl语言 - if语句 if 和 else 可以不成对出现,即,可以只有if没有else elsif可以有许多个 #!/usr/bin/perl $a=10; $b=15; if ($a > $b) { print "a=$a is bigger!"; } else { print "b=$b is bigger!"; } ########### if ($a == 5) { print '$a is 5'; } elsif ($a == 10) { print '$a is 10'; } elsif ($a == 15) { print '$a is 15'; } { print '$a is not (5 or 10 or 15)'; } if 和 else 可以不成对出现,即,可以只有if没有else elsif可以有许多个
9.2.5 Perl语言 - for语句 foreach语句中,用$_代表抓到的每一个当前变量。 #!/usr/bin/perl $n=scalar(@a); for ($i=0; $i<$n; $i++) { print "No.$i = $a[$i]\n";} ############ foreach (@a) { if ($_ % 2 == 0) { print "$_ is even. \n";} else { print "$_ is odd. \n";} } foreach语句中,用$_代表抓到的每一个当前变量。
9.2.6 Perl语言 - 模式匹配(Pattern Matching) - pattern写在斜线中:/pattern/ 匹配操作符 - 查看pattern是否匹配: =~ - 查看pattern是否不匹配: !~ 匹配和替换 - 匹配:m/pattern/ 或者 /pattern/ - 替换:s/pattern1/pattern2/
9.2.6 Perl语言 - 模式匹配(Pattern Matching) 模式匹配 –复习 升级的 BLAST: PHI-BLAST PHI-BLAST (Pattern-Hit Initiated BLAST, 模式识别BLAST) : 能 找到与查询序列相似的并符合某种模式(pattern)的蛋白质序列。 符合模式: [LIVMF]-G-E-x-[GAS]-[LIVM]-x(3,7) Yes: VGEAAMPRI No: VGEAAYPRI 模式序列可能代表是一个酶的活性位点,一个 蛋白质家族的结构或者功能域的氨基酸序列 。
9.2.6 Perl语言 - 模式匹配(Pattern Matching) 模式匹配 –转义符 [] 字符集中的任意一个 Eg. /[0123456789]/ 表示0-9是个数字中的任意一个 \d 0-9十个数字中的任意一个 Eg. /\d/ = /[0123456789]/ = /[0-9]/ \D 不是0-9是个数字中的任意一个 Eg. /\D/ = /[^0-9]/ \w 任何字母、数字和下划线中的任何一个 Eg. /\w/ = /[_0-9a-zA-Z]/ \W 不是字母、数字和下划线中的任何一个 Eg. /\W/ = /[^_0-9a-zA-Z]/ \s ”空格”, ”\r”,”\n”,”\t”,”\f”中的任何一个 Eg. /\s/ = /[ \r\t\n\f]/ \S 不是”空格”, ”\r”,”\n”,”\t”,”\f”中的任何一个 Eg. /\S/ = /[^ \r\t\n\f]/
^ 在字符集中 ^ 表示补集,在一般的模式中表示以什么开头 Eg. /[^123]/ 表示”不是1或2或3”;/^123/ 表示以”123”开头 $ 表示以什么结尾 Eg. /123$/ 表示以”123”结尾 . 匹配任何一个字符 Eg. /a.c/ 表示匹配1个a,接任何一个字符,再接1个c * 匹配0或更多次 Eg. /ab*c/ 表示匹配1个a,接0或更多个b,再接1个c + 匹配1或更多次 Eg. /ab+c/ 表示匹配1个a,接1或更多个b,再接1个c ? 匹配1或0次 Eg. /ab?c/ 表示匹配1个a,接0或1个b,再接1个c {count}匹配count次 Eg. /ab{3}c/ 表示匹配1个a,接3个b,再接1个c {min,} 匹配至少min次 Eg. /ab{3,}c/ 表示匹配1个a,接至少3个b,再接1个c {min,max} 匹配至少 min次,但不超过max次 Eg. /ab{3,5}c/ 表示匹配1个a,接3到5个b,再接1个c
9.2.6 Perl语言 - 模式匹配 模式匹配 –修饰词 i 忽略大小写 Eg. $s =~ /abc/i 表示匹配”abc”,无论大小写 Eg. $s =~ s/a/A/g 表示把$s中所有”a”都替换成”A” Eg. $s =~ s/a/A/ 表示把$s中匹配的第一个”a”替换成”A” x 忽略模式中的换行 Eg. $s =~ /ab 和 $s =~ /abc/ 是一样的 c/x /[a-z]+.\d{2,4}\s+[^XY]\s2013$/ $seq1 = "asd-345 A 2013" $seq2 = "sd-sss ws2013"
9.2.6 Perl语言 - 模式匹配 模式匹配 – 正则表达式 (regular expression) 可以用()捕获特定的模式 并依次存入 $1 $2 $3 中 $output="Robert 27 m\n 2013"; if ($output =~ m/([a-z]+)\s+(\d{1,3})\s+[mf]\s+2013$/) { print "name: $1\nage: $2"; }
9.2.7 Perl语言 - 文件写入写出(File I/O) #续写文件 ">>" open(FH, ">>test2.pdb"); print FH $get[1]; close FH; #覆盖写文件 ">" open(FH, ">test2.pdb"); #读入文件 open(FH,"test.pdb"); @get=<FH>; close FH; print $get[0]; #写入文件 open(FH, ">test2.pdb"); print FH $get[0];
9.2.7 Perl语言 - 文件写入写出(File I/O) #屏幕输入 print "What's your name?\n"; $name = <STDIN>; chomp($name); print "Hello $name!"; #$name由屏幕输入赋值 #去掉$name末尾的\n
9.2.8 Perl语言 - Web连接 #!/usr/bin/perl use LWP::Simple; $url='http://www.uniprot.org/uniprot/Q6GV17.fasta'; $content = get $url; die "Couldn't get $url" unless defined $content; print $content; ###### open (FH, ">seq.fasta"); @ids=("Q6GV17","Q9BXR5","B3Y669","C0LSK8"); foreach (@ids) { $url="http://www.uniprot.org/uniprot/$_.fasta"; print FH "$content"; } close FH;
9.2.8 Perl语言 - Web连接 #!/usr/bin/perl use LWP::Simple; print "Please enter the Uniprot ID:\n"; $id = <STDIN>; chomp $id; $url="http://www.uniprot.org/uniprot/$id.fasta"; $content = get $url; die "Couldn't get $url" unless defined $content; @get1 = split(/\n/,$content); shift @get1; $sequence = join("",@get1); print "Which amino acid?\n"; $aa = <STDIN>; chomp $aa; $count_aa=0; while ($sequence =~ m/$aa/g) { $count_aa++;} $len = length($sequence); $aa_percent=$count_aa/$len; print "$aa in $id: $aa_percent";
9.3 网页制作 - HTML HTML语言(Hyper Text Markup Language,超文本标记语言):描述信息所有的规范标签,这些标签告诉浏览器怎样显示这个页面。 源文件 网页
9.3.1 网页制作 - HTML基本语法 标签的基本结构: <Tag> </Tag> Eg: <h1>Hello World!</h1> <br></br> 等同于 <br/> 标签之间可以嵌套(一对标签里包含另一对标签): <Tag1> <Tag2> </Tag2> </Tag1> <Tag1> <Tag2> </Tag1> </Tag2> 这样是不对的 Eg: <h1><i>Hello World!</i></h1> 标签的属性: <Tag attribute1=“” attribute2=“”> </Tag> Eg: <font color=“blue” size=“3”>Hello World!</font> <h1 align=“center”>Hello Word</h1> 注释标签: <!--Comments--> Eg: <!--这里是注释,注释可以分 很多行业-->
9.3.1 网页制作 - HTML基本语法 HTML文档的结构: <HTML> <HEAD> <!--头部信息--> <title>My Site</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> </HEAD> <BODY> <!--文档主体,正文部分--> </BODY> </HTML>
9.3.2 网页制作 - HTML布局标签 标题标签:六个等级,H后数越小,标题字号就越大。 段落及换行标签: <H1></H1>, <H2></H2>, … , <H6></H6> 段落及换行标签: 换行标签:<BR/> 段落标签:<p></p>, <p align=“center”></p> align=“center” or ”left” (默认) or ”right” 水平线标签:<HR/> size:水平线宽度 width:水平线的长 align:水平线对齐方式 color: 水平线颜色
9.3.3 网页制作 - HTML文字标签 文字格式标签:<FONT></FONT> 文字效果标签: size: 文字大小,1-7,缺省是3 face: 文字字体,Eg:Arial,Verdana, … color: 文字颜色 文字效果标签: <b></b> 加粗 <i></i> 斜体 <u></u> 下划线 <tt></tt> 打印机字体 <blink></blink> 闪烁
9.3.4 网页制作 - HTML项目符号标签 项目符号标签: <ul> <dl> <li>第一项</li> <dt>第一项</dt> <li>第二项</li> <dd>第一项是关于老鼠</dd> …… <dt>第二项</dt> <li>第n项</li> <dd>第二项是关于大象</dd> </ul> </dl> <ul></ul> 以图形为项目符号,默认“圆点” <ol></ol> 以数字为项目符号 <dl></dl> 可以给每一个列表项再加上一段说明性文字
9.3.5 网页制作 - HTML表格标签 表格标签: 用valign设定上下对齐(top, middle, bottom)。 <table border=“1” width=“300” height=“300”> <th>姓名</th> <th>性别</th> <tr> <td>张三</td><td>女</td> </tr> <td>李四</td><td>男</td> </table> <table>定义了一个表格。 <th>定义了标题格。 <tr>定义一行。<td>定义了一行中的一列。 <td>可以用align设定左右对齐(left, center, right), 用valign设定上下对齐(top, middle, bottom)。
表格标签: <table border="1" width="300" height="300"> <th>姓名</th> <th>性别</th> <tr> <td align=“center”><b>张三</b></td> <td>女</td> </tr> <td align="center" colspan="2">李四</td> </table> <td align=“center” rowspan=“2”><b>张三</b></td> <td>男</td>
9.3.6 网页制作 - HTML超链接标签 超链接标签: 链接到外部地址:<a href="http://www.sdu.edu.cn">山东大学</a> 链接到内部地址:<a href=“index02.html”>本网站的另一个网页</a> 链接到上一级目录的网页:<a href=“../index03.html”>上一个</a> 链接到当前网页的某一个位置: <a name="top"/> <a href="#top">返回页首</a> 可利用target=“_blank”属性另网页在新的窗口中打开: <a href="http://www.sdu.edu.cn" target="_blank">山东大学</a> 若不加此项,则网页在当前窗口打开。
9.3.7 网页制作 - HTML表单标签 表单标签: 源文件 test.html 文件 网页 <html> <body> <FORM action="../cgi-bin/test.cgi" method="post" encType="multipart/form-data"> <input name="name" size="40"/> <input type="submit" name="submit" value="submit"/> </FORM> </body> </html> 源文件 test.html 文件 网页
9.3.7 网页制作 - HTML表单标签 表单标签: 源文件 test.cgi 文件 网页 #!/usr/bin/perl use CGI; $cgi = new CGI; $name = $cgi->param("name"); print $cgi->header( -type=> "text/html"); print "<p>Hallo $name!</p>"; 源文件 test.cgi 文件 网页
9.3.7 网页制作 - HTML表单标签 表单标签: name: <input name="name" size=“40"/> <input type="radio" name="sex" value="male" /> Male <br/> <input type="radio" name="sex" value="female" /> Female <input type="checkbox" name="fruit" value="apple">apple<br/> <input type="checkbox" name="fruit" value="mango">mango<br/> <textarea name="comment" rows="3" cols="20"> xxx </textarea> <input type="submit" name="submit" value="submit"/>