




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大纲 1 1 1 开头 ok 1 1 2 注释 ok 1 1 3 变量 ok 1 1 4 参数ok 1 1 5 环境变量 ok 1 1 6 Shell命令和流程控制 常用commandok 制御 ifok 制御 caseok 制御 selectok 制御 while forok 函数 1 1 7 Shell运算符做成中 1 1 8 常用特殊字符未着手 概要说明 1 1 1 开头 讲解 shell脚本的第一行 usr bin ksh bin sh 指定用哪种shell来执行 并且这个shell的执行器放在哪个目录 如果不写这一样 就会用默认的shell来执行 1 1 2 注释 注释用 来表示 除外 1 1 3 变量 1 变量的申明 shell的变量不需要申明 直接赋值 home RC if RC 0 then echo Failed to execute setenvval exit RC fi date time date Y m d H M S LOGNM MAIN LOG PATH GWFB0100 date time log echo START DAILY crontab Data Loading LOGNM MAIN 2 变量的赋值 注意点 变量的赋值 等号两边不能有空格 其他使用方法和通常的编程语言一样 例 RC 会解析成 RC是一个command 是一个参数 3 变量的引用 问题 引用变量时 不带引号 带单引号 带双引号的区别 例如 str1 Failed to execute setenvval str2 Failed to execute setenvval echo str1 echo str2 echo Failed to execute setenvval echo Failed to execute setenvval echo Failed to execute setenvval echo Failed to execute n setenvval echo Failed to execute n setenvval 3 1 的用法 变量名不能直接引用 shell变量不能直接引用 引用变量时 用 var str1 str1 test 则 str1abc str1 abc的结果是 空格 testabc 例如 str1 Failed to execute setenvval echo str1 输出的结果是 str1 而不是 Failed to execute setenvval 也就是说 直接使用str1 没起到引用变量的效果 echo Failed to execute setenvval 结果 Failed to execute setenvval echo Failed to execute setenvval 结果 不明 echo时 很有必要加上引号 3 2 双引号的用法 变量的弱引用 部分引用 阻止了部分关键字的执行 但是保留了部分关键字 例如 空格 如果不带引号 就是分隔符 echo Failed to str1 execute setenvval 结果 Failed to test execute setenvval func1 test1 test2 test3 func1 test1 test2 test3 3 3 单引号的用法 变量的强引用 全引用 echo Failed to str1 execute setenvval 结果 Failed to str1 execute setenvval 3 4 反引号的用法 包含需要执行的命令 在shell语言里 里面的语句说明是一条命令 需要执行 3 5 转义符 4 变量清楚 unset variable name 1 1 4 参数 1 参数的传入 2 参数的读取 1 1 5 环境变量 环境变量可以在命令行中设置 但用户注销时这些值将丢失 因此最好在 profile文件中定义 1 环境变量定义场所 profile文件中定义 永久变量 命令行定义 用户注销时丢失 shell脚本中 shell执行时生效 用户注销时丢失 2 环境变量作用范围 用户启动的所有job和所有命令行 3 设置环境变量 VARIABLE NAME value export VARIABLE NAME 4 显示环境变量 显示环境变量与显示本地变量一样 用echo命令即可 使用env命令可以查看所有的环境变量 5 清除环境变量 使用unset命令清除环境变量 unset VARIABLE NAME 6 常用系统环境变量 1 BASH 记录当前bash shell的路径 举例 root localhost awK echo BASH bin bash 2 BASH SUBSHELL 记录当前子shell的层次 BASH SUBSHELL是从0开始计数的整数 3 BASH VERSINFO 是一个数组包含六个元素 这六个元素显示bash的版本信息 4 BASH VERSION 显示shell版本的信息 5 DIRSTACK 记录了栈顶的目录值 初值为空 6 GLOBLGNORE 是由冒号分割的模式列表 表示通配时忽略的文件名集合 7 GROUPS 记录当前用户所属的组 8 HOME 记录当前用户的家目录 由 etc passwd的倒数第二个域决定 9 HOSTNAME 记录主机名 10 HOSTTYPE和MACHTYPE 都是记录系统的硬件架构 11 IFS 用于设置指定shell域分隔符 默认情况下为空格 root localhost awK export IFS root localhost awK echo PATH usr local sbin usr local bin sbin bin usr sbin usr bin root bin 12 OLDPWD 记录旧的工作目录 13 OSTYPE 记录操作系统类型 14 PATH 环境变量 显示当前PATH环境变量的内容 15 PPID 是创建当前进程的进程号 即当前进程的父进程号 16 PS1 提示符变量 用于设置提示符格式 用于设置一级shell提示符环境变量 17 PS2 用于设置二级shell提示符环境变量 18 PWD 记录当前路径 19 REPLY REPLY变量与read和select有关 20 SECONDS 记录脚本从开始到结束耗费的时间 21 SHELL 显示当前所用的shell 22 SHELLOPTS 记录了处于 开 状态的shell选项列表 它只是一个只读变量 23 SHLVL 记录了bash嵌套的层次 一般来说 我们启动第一个Shell时 SHLVL 1 如果在这个Shell中执行脚本 脚本中的 SHLVL 2 24 TMOUT 用来设置脚本过期的时间 比如TMOUT 3 表示该脚本3秒后过期 25 UID 已登用户的ID 26 USER 显示当前用户名字 1 1 6 Shell命令和流程控制 1 Shell命令 a Unix 命令 b 概念 管管道道 将一个命令的输出作为另外一个命令的输入 grep hello file txt wc l 重重定定向向 将命令的结果输出到文件 而不是标准输出 屏幕 写入文件并覆盖旧文件 加到文件的尾部 保留旧文件内容 反反短短斜斜线线 使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数 命令 find mtime 1 type f print 2 流程控制 1 if if then 通常用 来表示条件测试 elif then else fi 2 case case in do something here esac 3 selsect select var in do break done now var can be used 下面是一个例子 bin sh echo What is your favourite OS select var in Linux Gnu Hurd Free BSD Other do break done echo You have selected var 下面是该脚本运行的结果 What is your favourite OS 1 Linux 2 Gnu Hurd 3 Free BSD 4 Other 1 You have selected Linux 4 loop while do done for var in do done 关键字 break 用来跳出循环 而关键字 continue 用来不执行余下的部分而直接跳到下一个循环 下面是一个例子 功能是打印一些RPM包的统计信息 bin sh list a content summary of a number of RPM packages USAGE showrpm rpmfile1 rpmfile2 EXAMPLE showrpm cdrom RedHat RPMS rpm for rpmpackage in do if r rpmpackage then echo rpmpackage rpm qi p rpmpackage else echo ERROR cannot read file rpmpackage fi done 5 Here documents 1 1 7 Shell运算符 echo START DAILY crontab Data Loading LOGNM MAIN echo时 很有必要加上引号 2 BASH SUBSHELL 记录当前子shell的层次 BASH SUBSHELL是从0开始计数的整数 16 PS1 提示符变量 用于设置提示符格式 用于设置一级shell提示符环境变量 22 SHELLOPTS 记录了处于 开 状态的shell选项列表 它只是一个只读变量 23 SHLVL 记录了bash嵌套的层次 一般来说 我们启动第一个Shell时 SHLVL 1 如果在这个Shell中执行脚本 脚本中的 SHLVL 2 24 TMOUT 用来设置脚本过期的时间 比如TMOUT 3 表示该脚本3秒后过期 关键字 break 用来跳出循环 而关键字 continue 用来不执行余下的部分而直接跳到下一个循环 网址 参数处理 Shell传入参数的处理 1 传递到脚本的参数个数 2 以一个单字符串显示所有向脚本传递的参数 与位置变量不同 此选项参数可超过9个 3 脚本运行的当前进程ID号 4 后台运行的最后一个进程的进程ID号 5 与 相同 但是使用时加引号 并在引号中返回每个参数 6 显示shell使用的当前选项 与set命令功能相同 7 显示最后命令的退出状态 0表示没有错误 其他任何值表明有错误 变量 含义 0 脚本名字 1 位置参数 1 2 9 位置参数 2 9 10 位置参数 10 位置参数的个数 所有的位置参数 作为单个字符串 所有的位置参数 每个都作为独立的字符串 传递到脚本中的命令行参数的个数 传递到脚本中的命令行参数的个数 返回值 脚本的进程ID PID 传递到脚本中的标志 使用set 之前命令的最后一个参数 运行在后台的最后一个作业的进程ID PID 使用shell处理的时候对参数的处理是个基本模块 所以今天找到一篇简单易懂的文章来进行参考 作为以后shell参数处理的模板 推荐使用getOpts形式进行参数的处理 0 引言 写程序的时候经常要处理命令行参数 本文描述在Bash下的命令行处理方式 选项与参数 如下一个命令行 test sh f config conf v prefix home 我们称 f为选项 它需要一个参数 即config conf v 也是一个选项 但它不需要参数 prefix我们称之为一个长选项 即选项本身多于一个字符 它也需要一个参数 用等号连接 当然等号不是必须的 home可以直接写在 prefix后面 即 prefix home 更多的限制后面具体会讲到 在bash中 可以用以下三种方式来处理命令行参数 每种方式都有自己的应用场景 手工处理方式 getopts getopt 下面我们依次讨论这三种处理方式 1 手工处理方式 在手工处理方式中 首先要知道几个变量 还是以上面的命令行为例 0 test sh 即命令本身 相当于C C 中的argv 0 1 f 第一个参数 2 config conf 3 4 类推 参数的个数 不包括命令本身 上例中 为4 参数本身的列表 也不包括命令本身 如上例为 f config conf v prefix home 和 相同 但 和 加引号 并不同 将所有的参数解释成一个字符串 而 是一个参数数组 如下例所示 1 bin bash 2 3 for arg in 4 do 5 echo arg 6 done 7 8 for arg in 9 do 10 echo arg 11 done 12 执行 test sh f config conf n 10 会打印 f config conf n 10 这是 的输出 f 以下为 的输出 config conf NAME 10 所以 手工处理的方式即对这些变量的处理 因为手工处理高度依赖于你在命令行上所传参数的位置 所以一般都只用来处理较简单的参数 如 test sh 10 而很少使用 test n 10这种带选项的方式 典型用法为 bin bash if x 1 x then 有参数 else then 没有参数 fi 为什么要使用 x 1 x 这种方式来比较呢 想像一下这种方式比较 if n 1 1不为空 但如果用户不传参数的时候 1为空 这时 就会变成 n 所以需要加一个辅助字符串来进行比较 手工处理方式能满足大多数的简单需求 配合shift使用也能构造出强大的功能 但在要处理复杂选项的时候建议用下面的两种方法 2 getopts getopt 处理命令行参数是一个相似而又复杂的事情 为此 C提供了getopt getopt long等函数 C 的boost提供了Options库 在shell中 处理此事的是getopts和getopt getopts和getopt功能相似但又不完全相同 其中getopt是独立的可执行文件 而getopts是由Bash内置的 先来看看参数传递的典型用法 test sh a b c 短选项 各选项不需参数 test sh abc 短选项 和上一种方法的效果一样 只是将所有的选项写在一起 test sh a args b c 短选项 其中 a需要参数 而 b c不需参数 test sh a long args b long 长选项 我们先来看getopts 它不支持长选项 使用getopts非常简单 代码 test sh bin bash while getopts a bc arg 选项后面的冒号表示该选项需要参数 do case arg in a echo a s arg OPTARG 参数存在 OPTARG中 b echo b c echo c 当有不认识的选项的时候arg为 echo unkonw argument exit 1 esac done 现在就可以使用 test sh a arg b c 或 test sh a arg bc 来加载了 应该说绝大多数脚本使用该函数就可以了 如果需要支持长选项以及可选参数 那么就需要使用getopt 下面是getopt自带的一个例子 bin bash A small example program for using the new getopt 1 program This program will only work with bash 1 An similar program using the tcsh 1 script language can be found as parse tcsh Example input and output from the bash prompt parse bash a par1 another arg c long wow cmore b very long Option a Option c no argument Option c argument more Option b argument very long Remaining arguments par1 another arg wow Note that we use to let each command line parameter expand to a separate word The quotes around are essential We need TEMP as the eval set would nuke the return value of getopt o表示短选项 两个冒号表示该选项有一个可选参数 可选参数必须紧贴选项 如 carg 而不能是 c arg long表示长选项 在上面解释过 n 出错时的信息 举一个例子比较好理解 我们要创建一个名字为 f 的目录你会怎么办 mkdir f 不成功 因为 f会被mkdir当作选项来解析 这时就可以使用 mkdir f 这样 f就不会被作为选项 TEMP getopt o ab c long a long b long c long n example bash if 0 then echo Terminating exit 1 fi Note the quotes around TEMP they are essential set 会重新排列参数的顺序 也就是改变 1 2 n的值 这些值在getopt中重新排列过了 eval set TEMP 经过getopt的处理 下面处理具体选项 while true do case 1 in a a long echo Option a shift b b long echo Option b argument 2 shift 2 c c long c has an optional argument As we are in quoted mode an empty parameter will be generated if its optional argument is not found case 2 in echo Option c no argument shift 2 echo Option c argument 2 shift 2 esac shift break echo Internal error exit 1 esac done echo Remaining arguments for arg do echo arg done 比如我们使用 test a b arg arg1 c 你可以看到 命令行中多了个arg1参数 在经过getopt和set之后 命令行会变为 a b arg c arg1 1指向 a 2指向 b 3指向arg 4指向 c 5指向 而多出的arg1则被放到了最后 3 总结 一般小脚本手工处理也许就够了 getopts能处理绝大多数的情况 getopt较复杂 功能也更强大 shift其实很简单的 就是左移参数列表 shift一次就将最左边的参数 1移出去了 然后 原来的 2现在就变成了 1 shift后面还可以带上一个数字 指明要移出多少个参数 默认只移出一个 比如说 shift 3 就是移出3个参数 之后原来的 4就变成了现在的 1 eval就是先将后面的参数执行一遍 将必要的置换都做了 再来执行命令 举个例子 MYFILE cat myfile echo MYFILE output cat myfile eval MYFILE output contents of myfile 再举个详细点儿的例子 bin bash evalit echo Total number of arguments passed echo The process ID echo Last argument eval echo 运行脚本 evalit alpha bravo charlie output as follows Total number of arguments passed 3 The process ID 780 Last argument charlie 读取文件 for i in cat abc txt do echo i done 2 以一个单字符串显示所有向脚本传递的参数 与位置变量不同 此选项参数可超过9个 使用shell处理的时候对参数的处理是个基本模块 所以今天找到一篇简单易懂的文章来进行参考 作为以后shell参数处理的模板 推荐使用getOpts形式进行参数的处理 我们称 f为选项 它需要一个参数 即config conf v 也是一个选项 但它不需要参数 prefix我们称之为一个长选项 即选项本身多于一个字符 它也需要一个参数 用等号连接 当然等号不是必须的 home可以直接写在 prefix后面 即 prefix home 更多的限制后面具体会讲到 参数本身的列表 也不包括命令本身 如上例为 f config conf v prefix home 和 相同 但 和 加引号 并不同 将所有的参数解释成一个字符串 而 是一个参数数组 如下例所示 所以 手工处理的方式即对这些变量的处理 因为手工处理高度依赖于你在命令行上所传参数的位置 所以一般都只用来处理较简单的参数 如 但如果用户不传参数的时候 1为空 这时 就会变成 n 所以需要加一个辅助字符串来进行比较 手工处理方式能满足大多数的简单需求 配合shift使用也能构造出强大的功能 但在要处理复杂选项的时候建议用下面的两种方法 getopts和getopt功能相似但又不完全相同 其中getopt是独立的可执行文件 而getopts是由Bash内置的 test sh abc 短选项 和上一种方法的效果一样 只是将所有的选项写在一起 应该说绝大多数脚本使用该函数就可以了 如果需要支持长选项以及可选参数 那么就需要使用getopt 一般小脚本手工处理也许就够了 getopts能处理绝大多数的情况 getopt较复杂 功能也更强大 prefix我们称之为一个长选项 即选项本身多于一个字符 它也需要一个参数 用等号连接 当然等号不是必须的 home可以直接写在 prefix后面 即 prefix home 更多的限制后面具体会讲到 shell的本地变量和环境变量 2009 07 23 13 24 31 标签 杂谈 为使shell编程更有效 系统提供了一些shell变量 shell变量可以保存诸如路径名 文件名或 者一个数字这样的变量名 shell将其中任何设置都看做文本字符串 有两种变量 本地和环境 严格地说可以有4种 但其余两种是只读的 可以认为是特殊变 量 它用于向shell脚本传递参数 1 什么是shell变量 按照定义来说 变量是存储设备中的一些可读写的存储单元 变量可以定制用户本身的工作 环境 使用变量可以保存有用信息 使系统获知用户相关设置 变量也用于保存暂时信息 例如 一变量为EDITOR 系统中有许多编辑工具 但哪一个适用于系统呢 将此编辑器名 称赋给EDITOR 这样 在使用cron或其他需要编辑器的应用时 这就是你将一直使用的EDITOR取值 并将之用作缺省编辑器 举例来说 登录的审核系统需要编辑 在菜单中选择此选项时 应用查询EDITOR变量值 其值为vi 系统知道可使用此编辑器 用命令echo EDITOR看看自己的 另一个例子需要登录数据库系统 键入下列命令 isql Udavet Pabcd Smethsys 这里 S为正在连接的服务器名称 有一变量DSQUERY保存服务器名称值 设置服务器名 称值到DSQUERY变量 这样如果登录时不使用 S提供服务器名称 应用将查询DSQUERY 变量 并使用其取值作为服务器名称 需要做的全部工作就是键入下列命令 isql Udavet Pabcd 工作方式同上例 2 本地变量 本地变量在用户现在的shell生命期的脚本中使用 例如 本地变量file name取值为loop doc 这个值只在用户当前shell生命期有意义 如果在shell中启动另一个进程或退出 此值将 无效 这个方法的优点就是用户不能对其他的shell或进程设置此变量有效 使用变量时 如果用花括号将之括起来 可以防止shell误解变量值 尽管不必一定要这样 做 但这确实可用 要设置一本地变量 格式为 variable name value 或 variable name value 注意 等号两边可以有空格 如果取值包含空格 必须用双引号括起来 shell变量可以用大 小写字母 变量设置时的不同模式 Variable name value 设置实际值到variable name Variable name value 如果设置了variable name 则重设其值 Variable name value 如果未设置variable name 显示未定义用户错误信息 Variable name value 如果未设置variable name 显示系统错误信息 Variable name value 如果未设置variable name 设置其值 Variable name value 同上 但是取值并不设置到variable name 可以被替换 2 1 显示变量 使用echo命令可以显示单个变量取值 并在变量名前加 例如 echo LOGNAME dave 可以结合使用变量 下面将错误信息和环境变量LOGNAME设置到变量error msg ERROR MSG sorry there is not LOGNAME echo ERROR MSG sorry there is not dave 上面例子中 shell首先显示文本 然后查找变量 LOGNAME 最后扩展变量以显示整个变 量值 2 2 清除变量 使用unset命令清除变量 unset variable name 2 3 显示所有本地shell变量 使用不加任何参数的set命令显示所有本地定义的shell变量 set输出可能很长 查看输出时可以看出shell已经设置了一些用户变量以使工作环境更加 容易使用 2 4 结合变量值 将变量并排可以使变量结合在一起 echo var 1 var 2 2 5 测试变量是否已经设置 有时要测试是否已设置或初始化变量 如果未设置或初始化 就可以使用另一值 此命令 格式为 variable value 意即如果设置了变量值 则使用它 如果未设置 则取新值 例如 color blue echo The sky is color grey today The sky is blue today 变量colour取值blue echo打印变量colour时 首先查看其是否已赋值 如果查到 则使用 该值 现在清除该值 再来看看结果 color blue unset color echo The sky is color grey today The sky is grey today 上面的例子并没有将实际值传给变量 需使用下述命令完成此功能 variable value 2 6 使用变量来保存系统命令参数 可以用变量保存系统命令参数的替换信息 下面的例子使用变量保存文件拷贝的文件名信 息 变量source保存passwd文件的路径 source etc passwd cd source 2 7 设置只读变量 如果设置变量时 不想再改变其值 可以将之设置为只读方式 如果有人包括用户本人想 要改变它 则返回错误信息 格式如下 variable name value readonly variable name 设为只读后 任何改变其值的操作将返回错误信息 要查看所有只读变量 使用命令 readonly即可 3 环境变量 环境变量用于所有用户进程 经常称为子进程 登录进程称为父进程 s h e l l中执行的用 户进程均称为子进程 不像本地变量 只用于现在的s h e l l 环境变量可用于所有子进程 这包括编辑器 脚本和应用 环境变量可以在命令行中设置 但用户注销时这些值将丢失 因此最好在 profile文件中定 义 系统管理员可能在 etc profile文件中已经设置了一些环境变量 将之放入profile文件 意味着每次登录时这些值都将被初始化 传统上 所有环境变量均为大写 环境变量应用 于用户进程前 必须用export命令导出 环境变量与本地变量设置方式相同 3 1 设置环境变量 VARIABLE NAME value export VARIABLE NAME 在两个命令之间是一个分号 也可以这样写 VARIABLE NAME value export VARIABLE NAME 3 2 显示环境变量 显示环境变量与显示本地变量一样 用echo命令即可 使用env命令可以查看所有的环境变量 3 3 清除环境变量 使用unset命令清除环境变量 unset VARIABLE NAME 3 4 嵌入shell变量 Brourne shell 有一些预留的环境变量名 这些变量名不能用作其他用途 通常在 etc profile中建立这些 嵌入的环境变量 但也不完全是 这取决于用户自己 以下是嵌入shell变量列表 1 CDPATH 改变目录路径变量 保留一系列由冒号隔开的路径名 用于cd命令 如果设置了CDPATH cd一个目录时 首先查找CDPATH 如果CDPATH指明此目录 则此目录成为当前工作目录 例子如下 CDPATH home dave bin usr local apps export CDPATH 如果要 cd apps cd命令首先在CDPATH中查找目录列表 如果发现apps 则它成为当前工作目录 2 EXINIT EXINIT变量保存使用vi编辑器时的初始化选项 例如 调用vi时 要显示行号 且在第10个 空格加入tab键 命令为 EXINIT set nu tab 10 export EXINIT 3 HOME HOME目录 通常定位于passwd文件的倒数第2列 用于保存用户自身文件 设置了HOME 目录 可以简单使用cd命令进入它 也可以用 cd HOME 4 IFS IFS用作shell指定的缺省域分隔符 原理上讲域分隔符可以是任意字符 但缺省通常为空格 新行或tab键 IFS在分隔文件或变量中各域时很有用 下面的例子将IFS设置为冒号 然后 echo PATH变量 给出一个目录分隔开来的可读性很强的路径列表 sbin bin usr bin home dave bin 要设置其返回初始设置 IFS export IFS 这里为空格和tab键 5 LOGNAME 此变量保存登录名 应该为缺省设置 但如果没有设置 可使用下面命令完成它 LOGNAME dave export LOGNAME 6 MAIL MAIL变量保存邮箱路径名 缺省为 var spool mail shell周期性检查新邮件 如果有了新邮件 在命令行会出现一个提示信息 如果邮箱并不在以上指定位置 可以用 MAIL设置 MAIL usr mail dave export MAIL 7 MAILCHECK MAILCHECK缺省每60s检查新邮件 但如果不想如此频繁检查新邮件 比如设为每2m 使 用命令 MAILCHECK 120 export MAILCHECK 8 MAILPATH 如果有多个邮箱要用到MAILPATH 此变量设置将覆盖MAIL设置 MAILPATH var spool dave var spool admin export MAILPATH 上面的例子中 MAIL检测邮箱dave和admin 9 PATH PATH变量保存进行命令或脚本查找的目录顺序 正确排列这个次序很重要 可以在执行命 令时节省时间 你一定不想在已知命令不存在的目录下去查找它 通常情况 最好首先放 在HOME目录下 接下来是从最常用到一般使用到不常用的目录列表次序 如果要在当前 工作目录下查询 无论在哪儿 均可以使用句点操作 目录间用冒号分隔 例如 PATH HOME bin bin usr bin export PATH 使用上面的例子首先查找HOME bin目录 然后是当前工作目录 然后是 bin 最后是 usr bin PATH可以在系统目录下 etc profile中设置 也可以使用下面方法加入自己的查找目录 PATH PATH HOME bin export PATH 这里使用了 etc profile中定义的PATH 并加入 HOME bin和当前工作目录 一般来说 在 查找路径开始使用当前工作目录不是一个好办法 这样很容易被其他用户发现 10 PS1 基本提示符包含shell提示符 缺省对超级用户为 其他为 可以使用任何符号作提示符 11 PS2 PS2为附属提示符 缺省为符号 PS2用于执行多行命令或超过一行的一个命令 12 SHELL SHELL变量保存缺省shell 通常在 etc passwd中已设置 但是如有必要使用另一个shell 可以用如下方法覆盖当前shell 13 TERMINFO 终端初始化变量保存终端配置文件的位置 通常在 usr lib terminfo或 usr share terminfo TERMINFO usr lib terminfo export TERMINFO 14 TERM TERM变量保存终端类型 设置TERM使应用获知终端对屏幕和键盘响应的控制序列类型 常用的有vt100 vt200 vt220 8等 TERM vt100 export TERM 15 TZ 时区变量保存时区值 只有系统管理员才可以更改此设置 例如 echo TZ GMT2EDT 返回值表明正在使用格林威治标准时间 与GMT时差为2 并作EDT保存 3 5 其他环境变量 还有一些预留的环境变量 其他系统或命令行应用将用到它们 以下是最常用的一些 注 意这些值均未有缺省设置 必须显示说明 1 EDITOR 设置编辑器 最常用 EDITOR vi export EDITOR 2 PWD 当前目录路径名 用cd命令设置此选项 3 PAGER 保存屏幕翻页命令 如pg more 在查看man文本时用到此功能 PAGER pg f p d export PAGER 4 MANPATH 保存系统上man文本的目录 目录间用冒号分隔 MANPATH usr apps man usr local man export MANPATH 5 LPDEST或PRINTER 保存缺省打印机名 用于打印作业时指定打印机名 LPDEST hp3si systems 3 6 set命令 在 HOME profile文件中设置环境变量时 还有另一种方法导出这些变量 使用set命令 a 选项 即set a指明所有变量直接被导出 不要在 etc profile中使用这种方法 最好只在自 己的 HOME profile文件中使用 3 7 将变量导出到子进程 shell新用户碰到的问题之一是定义的变量如何导出到子进程 前面已经讨论过环境变量的 工作方式 现在用脚本实现它 并在脚本中调用另一脚本 这实际上创建了一个子进程 以下是两个脚本列表father和child father脚本设置变量film 取值为AFewGoodMen 并将变 量信息返回屏幕 然后调用脚本child 这段脚本显示第一个脚本里的变量film 然后改变其 值为DieHard 再将其显示在屏幕上 最后控制返回father脚本 再次显示这个变量 more father bin sh father script echo this is the father FILM A Few Good Men echo I like the film FILM call the child script child echo back to father echo and the film is FILM more child bin sh child script echo called from father i am the child echo film is FILM FILM Die Hard echo changing film to FILM 看看脚本显示结果 this is the father I like the film A Few Good Men child line 1 child command not found called from father i am the child film is changing film to Die Hard back to father and the film is A Few Good Men 因为在father中并未导出变量film 因此child脚本不能将film变量返回 如果在father脚本中 加入export命令 以便child脚本知道film变量的取值 这就会工作 more father2 bin sh father2 script echo this is the father FILM A Few Good Men echo I like the film FILM call the child script but export varible first export FILM child echo back to father echo and the film is FILM father2 this is the father I like the film A Few Good Men called from father i am the child film is A Few Good Men changing film to Die Hard back to father and the film is A Few Good Men 因为在脚本中加入了export命令 因此可以在任意多的脚本中使用变量film 它们均继承了 film的所有权 4 位置变量参数 本章开始提到有4种变量 本地 环境 还有两种变量被认为是特殊变量 因为它们是只读 的 这两种变量即为位置变量和特定变量参数 先来看一看位置变量 如果要向一个shell脚本传递信息 可以使用位置参数完成此功能 参数相关数目传入脚本 此数目可以任意多 但只有前9个可以被访问 使用shift命令可以改变这个限制 以后将 讲到shift命令 参数从第一个开始 在第9个结束 每个访问参数前要加 符号 第一个参 数为0 表示预留保存实际脚本名字 无论脚本是否有参数 此值均可用 如果向脚本传送Did You See Th e Full Moon信息 下面的表格讲解了如何访问每一个参数 0 1 2 3 4 5 6 7 8 9 脚本名字 Did You See The Full Moon 4 1 在脚本中使用位置参数 在下面脚本中使用上面的例子 more param bin sh param echo This is the script name 0 echo This is the first parameter 1 echo This is the 2nd parameter 2 echo This is the third parameter 3 echo This is the 6th parameter 6 echo This is the 7th parameter 7 param Did You See The Full Moon This is the script name param This is the first parameter Did This is the 2nd parameter You This is the third parameter See This is the 6th parameter Moon This is the 7th parameter 这里只传递6个参数 7 8 9参数为空 正像预计的那样 注意 第一个参数表示脚本名 当 从脚本中处置错误信息时 此参数有很大作用 注意 0返回当前目录路径 如果只返回脚本名 在basename命令下参数设为 0 刚好得到 脚本名字 more param2 bin sh echo this is basename 0 calling param2 this is param2 calling 4 2 向系统命令传递参数 可以在脚本中向系统命令传递参数 下面的例
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医用药技能考试题及答案
- 安全月知识考试题及答案
- 2025洪水公务员面试题及答案
- 旅游商业地产商铺返租与全域旅游经营管理合同
- 股份代持与知识产权保护合同
- 企业员工集资共建职工餐厅协议
- 老师专业考试试题及答案
- 消防安全演习培训内容课件
- 2025至2030节能建材行业发展趋势分析与未来投资战略咨询研究报告
- 愚公移山翻译工作总结
- 【内蒙古】2024内蒙古事业单位联考考试笔试附带答案详解
- 生物医药公司采购管理制度
- 煤矿关联交易管理制度
- 器械UDI码管理制度
- 印章管理工作培训
- 园林养护班组管理制度
- 矿业公司股权转让与资源开发合作协议
- 司马懿的课件
- 2025年餐饮系统项目市场调查研究报告
- 2025年人教版高中物理必修3专项复习:电势差与电场强度的关系(解析版)
- 国有融资担保公司笔试真题解析
评论
0/150
提交评论