您的位置:首页 > 运维架构 > Shell

Shell 编程9(高级变量)

2013-03-06 21:39 661 查看
内部变量

(1)BASH

BASH记录了bash Shell的路径,通常为/bin/bash,内部变量SHELL就是通过BASH的值确定当前Shell的类型

BASH_SUBSHELL

BASH_SUBSHELL记录了子Shell的层次,这个变量在bash版本3之后才出现的

BASH_VERSINFO

BASH_VERSINFO是一个数组,包含6个元素,这6个元素用于表示bash的版本信息

BASH_VERSION

Linux系统的bash Shell版本,包含了主次版本、补丁级别、编译版本和发行状态,即BASH_VERSINFO数组从0到4的值

(2)DIRSTACK (重点)

Linux目录栈用于存放工作目录,便于程序员手动控制目录的切换,bash Shell定义了两个系统命令pushd和popd

pushd命令用于将某目录压入目录栈,同时将当前工作目录切换到入栈的目录

popd命令将栈顶目录弹出,栈顶元素变为下一个元素,同时将当前工作目录切换到栈弹出的目录

DIRSTACK记录了栈顶目录值,初值为空

(3)GLOBIGNORE (重点)

GLOBIGNORE是由冒号分隔的模式列表,表示通配(globbing)时忽略的文件名集合

eg:

ls f* 列出以f开都的文件

GLOBIGNORE="f*" 表示忽略通配

ls f* 此时则没有任何以f开头的结果

(4)GROUPS

GROUPS记录了当前用户所属的群组,Linux的一个用户可同时包含在多个组内,因此,GROUPS是一个数组,数组记录了当前用户所属的所有群组号

HOSTNAME

记录了Linux主机的名字

HOSTTYPE和MACHTYPE

记录系统的硬件架构

OSTYPE

记录了操作系统类型,Linux系统中,$OSTYPE=linux

(5)REPLY 这个也很重要主要有两点

1

REPLY变量与read和select命令有关

read命令用于读取标准输入(stdin)的变量值

read variable #varibale是变量名

read将读到的标准输入存储到variable变量中。read命令也可以不带任何变量名,此时,read就将读到的标准输入存储到REPLY变量中

eg

脚本:

#!/bin/bash

echo -n "Enter your name:"

read

echo "read without anyvariables : REPLY=$REPLY"

echo -n "Enter your age: "

read age

echo "read with variables: age=$age and REPLY=$REPLY"

运行:

ming@ming-F83VF:~/shellpractice/chapter9$./reply.sh

Enter your name: anders

read without any variables : REPLY=anders

Enter your age: 22

read with variables: age=22 and REPLY=anders

结论:

read 后无任何变量,则默认保存到REPLY变量中

而当read后有变量,则保存到变量中,而REPLY存储的是上一次的read的值

2

REPLY

REPLY变量与read和select命令有关

bash Shell的select命令源自于Korn Shell,是一种建立菜单的工具,它提供一组字符串供用户选择,用户不必完整地输入字符串,而只需输入相应的序号进行选择

select variable in list

do

Shell命令1

Shell命令2

Shell命令3

……

break

done

select自动将list形成有编号的菜单,用户输入序号以后,将该序号所对应list中的字符串赋给variable变量,而序号值则保存到REPLY变量中

eg

脚本:

#!/bin/bash

echo "which one are you skilledin?"

select var in"shell" "java" "c++" "c""php" "c#"

do

echo"the \$REPLY = $REPLY"

echo"you are skilled in $var"

break

done

运行

ming@ming-F83VF:~/shellpractice/chapter9$./selectreply.sh

which one are you skilled in?

1) shell

2) java

3) c++

4) c

5) php

6) c#

#? 2

the $REPLY = 2

you are skilled in java

(6) SECONDS

记录脚本从开始执行到结束所耗费的时间,以秒为单位

eg

#!/bin/bash

count=1

MAX=5

while ["$SECONDS" -le "$MAX" ]

do

echo"this is the $count time to sleep!"

letcount=$count+1

sleep 2

done

echo "this script runs $SECONDS seconds!"

运行

ming@ming-F83VF:~/shellpractice/chapter9$./testsecond.sh

this is the 1 time to sleep!

this is the 2 time to sleep!

this is the 3 time to sleep!

this script runs 6 seconds!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: