shell程序设计(通信)1报告
- 格式:doc
- 大小:101.01 KB
- 文档页数:9
Shell程序设计 本章的学习目标 了解shell的地位和作用 熟练掌握shell脚本的建立与执行方法 掌握shell的变量及特殊字符 掌握shell的输入输出命令 掌握shell程序逻辑结构语句 主要内容 Shell概述 Shell的变量 Shell中的特殊字符 Shell编辑中的输入输出命令 Shell结构控制语句 Shell简介 1、Shell的功能(1)作为命令解释程序 (2)作为一种高级程序设计语言 shell是一种命令行解释程序,它提供了用户与操作系统之间基于命令行的交互界面。用户命令行输入命令,由SHELL对它们做出解释,并将其送往操作系统去执行。然而,它不仅仅是一种交互式语言,它还是一种可编程的程序设计语言。将若干个shell命令写入一个文件就构成了一个shell程序,它可以被shell逐条的解释执行。 Shell简介 shell程序可以使用各种变量、参数和控制结构来组织命令流程,自动化的完成各种复杂冗繁的处理工作。 shell是基于字符串的语言:只做字符串处理,不支持复杂的数据结构和运算。Shell输出也全部是字符方式。 2、Shell的主要版本:sh csh ksh 在linux系统中流行的使用的shell主流是Bash,它是Bourne Again Shell的缩写,bash是由bourne shell发展而来的,但是它包含了csh和ksh的特性。 shell脚本的建立与执行 shell脚本的建立 Shell脚本是文本文件,可以用任何文本编辑器建立和编辑脚本,shell脚本文件的名称没有限定的扩展名,通常不带扩展名或带“.sh”扩展名。 ①vi shell脚本名 ②cat >文件名 。。。。。 Ctrl+d 例9.1 第1个Shell程序: $ cat hello #hello程序 # This is a shell script to say hello. echo Hello World! echo -n “Today is ” date “+%A, %B %d, %Y.” $ . hello #运行hello程序 Hello World! Today is Saturday, October 13, 2015. $ 这个hello程序的第1行是注释,后面3行是命令。在执行此程序时,Shell依次执行这3个命令并输出显示信息。 shell脚本的建立与执行 shell脚本的执行方式主要有3种 (1) 将脚本作为可执行文件执行: $ chmod a+x hello $ ./hello 用文本编辑器生成的脚本文件默认是没有x权限的,也就是说是不可直接执行的。赋予x权限后,脚本就可以像一般的Shell命令那样执行了。如果脚本不在系统存放命令的标准目录下,需要在执行时指定脚本的路径。上例中脚本hello放在当前目录下,所以要用./hello来运行。 shell脚本的建立与执行 (2) 启动一个Shell子进程来执行脚本文件: $ sh hello #或sh < hello 执行此命令行时,Shell进程先启动一个bash子进程,让它执行hello脚本的内容,执行完毕后bash子进程也终止。在这种方式中,脚本是作为命令参数传给子Shell的。子Shell运行时读取该文件并执行其内容,因此脚本文件不必有执行权限。 shell脚本的建立与执行 (3) 让当前Shell进程执行脚本文件: $ . hello #注意.后面的空格 “.”是一个Shell内部命令,hello是它的参数。“.”命令的功能是读取参数指定的文件,执行其内容。这种执行方式与第2种方式类似,区别在于此方式是由当前Shell进程来执行脚本文件的。 shell的变量 Shell是基于字符串的编程语言,shell的变量只能存储字符串。 Shell的变量有两种类型,即shell环境变量和用户自定义变量。 Shell的环境变量:作用是定制shell的运行环境,保证shell正确执行,它又分为可写和只读两大类。 1、可写的shell环境变量 可写的shell环境变量可以对它们进行赋值,大部分可写的shell环境变量都在登录过程中执行“/etc/profile”文件时进行初始化。该文件由系统管理员设置,用于为系统上的所有用户建立一个公共环境。 部分重要的可写环境变量 CDPATH: 包含一系列目录名;如果该变量未设置,cd命令将搜索当前目录。 ENV:UNIX/ linux查找配置文件的路径 HOME:用户初次登录时的起始目录 PATH:包含了用户的搜索路径的变量,也即shell用来搜索外部命令或者程序的目录。 PS1:在命令行上出现的shell提示符。 PS2:如果shell认为一个命令尚未结束,例如当命令以作为转义字符的反斜杠终止时,则在命令的第二行显示第2个shell提示符 PWD:当前工作目录的名称 TREM:用户控制终端的类型 PPID:父进程的进程ID号 2、只读的shell环境变量 只读的shell环境变量的变量名和值有shell自动设置。用户能使用和读取它们的值,但不能对它们进行更改,只读的shell环境变量有两种:一种是特殊的环境变量;另一种是位置参数。 特殊的环境变量 $@所有参数字符串组成的字符串 $0 shell程序名 $1-$9第一至第9个命令行参数的值 $#命令行参数的个数 $$当前进程的进程ID(PID) $?最后执行的一条命令的退出状态,返回值为0则成功,非0则失败 $!在后台运行的最后一个进程的进程ID 位置参数 在命令行传递给shell脚本的参数。 共有十个位置参数,依次是 $0,$1,$2,„,$9 必有$0;而其他位置参数依据实际需求,可有可无。 输出位置参数 可以用echo命令输出位置参数 [root@localhost ~]# cat var_test echo My name is $0, I have $# parameters, they are $@ echo The first of them is \“$1\” 字符串测试 参数 功能 str 如果字符串str不是空字符串,则测试条件为真 str1 = str2 如果strl等于str 2,则测试条件为真(注意,“=”前后须有空格) str1 ! = str2 如果str1不等于str2,则测试条件为真 -n str 如果字符串str的长度不为0,则测试条件为真 -z str 如果字符串str的长度为O,则测试条件为真 例如: (1)判断两个变量S1与S2字符串是否相等,可以写成[“$S1” = “$S2”]或者test “$S1” = “$S2” (2)在引用变量及字符串中,要求用双引号括起来,如判断变量S1是否等于字符串“yes”可以写成: [“$S1” = “yes”]或者test “$S1 = “yes” 幻灯片52 数值测试 参数 功能 n1 –eq n2 如果整数n1等于n2(n1 = n2),则测试条件为真 n1 –ne n2 如果整数nl不等于n2(n1 <> n2),则测试条件为真 n1 –lt n2 如果n1小于n2(n1 < n2),则测试条件为真 n1 –le n2 如果n1小于等于n2(n1 <= n2),则测试条件为真 n1 –gt n2 如果n1大于n2(n1 > n2),则测试条件为真 n1 –ge n2 如果nl大于等于n2(n1 >= n2),则测试条件为真
幻灯片53 用逻辑操作符进行组合的测试语句 参数 功能 ! 逻辑非,放在任意逻辑表达式之前,原来真的表达式变为假,原来假的变为真 -a 逻辑与,放在两个逻辑表达式之间,仅当两个逻辑表达式都为真时,结果才为真 -o 逻辑或,放在两个逻辑表达式之间,其中只要有一个逻辑表达式为真时,结果就为真 ( ) 圆括号,用于将表达式分组,优先得到结果。括号前后应有空格并用转义符“\(”和“\)” 用逻辑操作符进行组合的测试语句实例 [ ! "$s1" -le 0 ] ! test "$s1" -le 0 [ -f "$s1" –a –w "$s1" ] test –f "$s1" -a –w "$s1" [ "$s1" –gt 0 –o "$s2" –lt 10 ] test "$s1" –gt 0 –o "$s2" –lt 10 [ \( "$a" –gt 0 –a "$a" –lt 10 \) –a "$a" –ne 5 ] test \( "$a" –gt 0 –a "$a" –lt 10 \) –a "$a" –ne 5 算术表达式和退出脚本程序命令 五种基本的算术运算:+(加)、-(减)、\*(乘)、/(除)和%(取模)。shell只提供整数的运算。格式如下: expr n1 运算符 n2 例:expr 15 \* 15 注意:在运算符的前后都留有空格,否则expr不对表达式进行计算,而直接输出它们。 退出脚本程序命令exit case语句 对同一变量进行多次的测试,比elif语句更简单、简洁 case string1 in str1) commands-list1;; str2) commands-list2;;