内部变量
(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
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!