Shell 编程9(高级变量)

 内部变量

(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定义了两个系统命令pushdpopd

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!












你可能感兴趣的:(Shell 编程9(高级变量))