9.1、内部变量。
内部变量是指能够对bash shell脚本行为产生影响的变量,它们对shell及其子shell都有效。因此,内部变量属于环境变量的范畴。而环境变量中的pwd、shell、user、uid、ppid、ps1、ps2和ifs变量都为内部变量。
1)bash
bash记录了bash shell的路径,通常为/bin/bash,内部变量shell就是通过bash的值确定当前shell的类型。可通过命令echo $bash 和 echo $shell来显示bash和shell变量的值。
2)bash-subshell
bash-subshell记录了子shell的层次,这个变量在bash版本3之后才出现的。
3)bash-versinfo
bash-versinfo是一个数组,包含6个元素,这6个元素用于表示bash的版本信息。
例:输出bash-versinfo数组的值。
#!/bin/bash
for n in 0 1 2 3 4 5
doecho "bash_versinfo[$n]=$
done结果:bash_versinfo[0]=4
bash_versinfo[1]=2
bash_versinfo[2]=24
bash_versinfo[3]=1
bash_versinfo[4]=release
bash_versinfo[5]=i386-redhat-linux-gnu
bash_versinfo[0]表示bash shell的主版本号,bash_versinfo[1]表示bash shell的次版本号,bash_versinfo[2]表示bash shell的补丁级别,bash_versinfo[3]表示bash shell的编译版本,bash_versinfo[4]表示bash shell的发行状态,bash_versinfo[5]表示bash shell的硬件架构。
4)bash_version
linux系统的bash shell版本包含主次版本、补丁级别、编译版本和发行状态,即bash_version数组取值为0~4。可通过命令echo $bash_version 来显示bash_version变量的值。
5)dirstack
它显示目录栈的栈顶值,栈是一种线性数据结构,遵循后进先出(last in first out,lifo)的原则,即最后压入栈的元素位于栈顶,它将最早被弹出。栈结构一般有两个动作:入栈(pushing)将元素放入栈的顶端,出栈(poping)将顶端元素取出。
linux目录栈用于存放工作目录,便于程序员手动控制目录的切换,bash shell定义了两个系统命令pushd和popd来维护目录栈,pushd命令用于将某目录压入目录栈,同时将当前工作目录切换到入栈的目录,popd命令将栈顶目录弹出,栈顶元素变为下一个元素,同时将当前工作目录切换到栈弹出的目录,两个命令的格式为:
pushd 目录名。
popddirstack记录了栈顶目录值,初值为空。另外,linux还有一个命令dirs用于显示目录栈的所有内容,pushd和popd命令执行成功将自动激活dirs命令以显示当前目录栈的内容。
6)globignore
globignore是由冒号分隔的模式列表,表示通配(globbing)时忽略的文件名集合。
通配是把一个包含通配符的非具体文件名扩展到存储在计算机、服务器或者网络上的一批具体文件名的过程,一旦globignore非空,shell会将通配得到的结果中符合globignore模式中的目录去掉。
命令globignore=”ar*” 将globignore赋为以ar开头的模式。
命令echo $globignore 查看globignore变量的值。
7)groups
groups记录了当前用户所属的群组,linux的一个用户可同时包含在多个组内,因此,groups是一个数组,数组记录了当前用户所属的所有群组号。linux管理用户组的文件是/etc/group,每个群组对应该文件中的一行,并用冒号分成四个域,/etc/group每一行的格式为:群组名:
加密后的组口令:群组号:组成员列表。
8)hostname
hostname记录了主机名,linux主机名是网络配置时必须要设置的参数,我们一般在/etc/sysconfig/network文件中设置主机名。/etc/hosts文件用于设定ip地址和主机名之间的对应关系,以利于快速从主机名查找到ip地址。
9)hosttype和machtype
hosttype和machtype一样,都用于记录系统的硬件架构,实际上,它们与bash_versinfo[5]也是等值的,可以用echo $hosttype和echo $machtype命令来查看hosttype和machtype变量的值。
10)ostype
ostype记录了操作系统类型,linux系统中,$ostype=linux。
11)reply
reply变量与read和select命令有关。
read命令用于读取标准输入(stdin)的变量值,可以将read命令简单理解为接受用户的键盘输入,交互式shell脚本经常用到read命令。read命令的一般格式为:
read variable
variable是变量名,read将读到的标准输入存储到variable变量中。
例:演示reply变量在read命令中的用法。
#!/bin/bash
echo -n "what is your name?"
readread不带变量名。
echo "you name is $reply打印$reply
echo -n "what is the name of your father?"
read fname
echo "you father's name is $fname"
echo "but the \$reply is $reply"
结果:what is your name?jack
you name is jack #reply变量的值,read已将从标准输入读取的值存储到reply了。
what is the name of your father?tom
you father's name is tomfname变量的值。
but the $reply is jackreply变量的值保持不变。
bash shell的select命令源自于korn shell,是一种建立菜单的工具,它提供一组字符串供用户选择,用户不必完整地输入字符串,只需输入相应的序号进行选择,select命令的格式为:
select variable in list
doshell 命令1
shell 命令2
breakdone
select命令格式中的list是字符串列表,select自动将list形成有编号的菜单,用户输入序号以后,将该序号所对应的list中的字符串赋给variable变量,而序号值则保存到reply变量中。select命令的do break语句段中可以添加shell命令,对variable或reply进行调用。
例:#!/bin/bash
echo "pls. choose your profession?"
select var in "worker" "doctor" "other"
doecho "the \$reply is $reply."
echo "your profession is $var."
breakdone
每个字符串用双引号引起,中间用空格分隔,select命令的变量名为var。
结果:pls. choose your profession?
1) worker
2) doctor
3) other
the $reply is 2.
your profession is doctor.
在执行结果中,shell提示符变为“#?”,该提示符由shell提示符变量ps3进行设置,“#?”是其默认值。
重新定义ps3变量后,运行上述脚本,shell提示符变成ps3的值。
执行:ps3=”pls. enter:“
执行:export ps3
结果:pls. choose your profession?
1) worker
2) doctor
3) other
pls. enter: 2
the $reply is 2.
your profession is doctor.
12)seconds
seconds记录脚本从开始执行到结束所耗费的时间,以秒为单位。
例:#!/bin/bash
count=1
max=5while [ seconds" -le "$max" ]
doecho "this is the $count time to sleep."
let count=$count+1
sleep 2运行该脚本进程休眠2秒。
doneecho "the running time of this script is $seconds"
13)shellopts
shellopts记录了处于“开”状态的shell选项(options)列表,它是一个只读变量。shell选项用于改变shell的行为,一个shell选项有“开”和“关”两种状态。set命令用于打开或关闭选项,最基本的两种格式为:
set -o optionname打开名为optionname选项。
set +o optionname #关闭名为optionname选项。
AWRWarehouse的高级用法
简介。将所有 awr 数据纳入一个信息库 通过 oracle enterprise manager 12c 触手可及 的想法非常诱人,但提供直接查询 我的许多伙伴就是这样,他们一有 awr 报告或 addm 比较无法回答的业务问题,就会直接查询 的选项也不可忽视。我毫不怀疑他们会对 awr ware...
define的高级用法
的功能是将其后面的宏参数进行字符串化操作 stringfication 简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面 中的宏 define warn if exp do while 0 那么实际使用中会出现下面所示的替换过程 warn if divider 0 被替换为...
define的高级用法
的功能是将其后面的宏参数进行字符串化操作 stringfication 简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面 中的宏 define warn if exp do while 0 那么实际使用中会出现下面所示的替换过程 warn if divider 0 被替换为...