来源: http://blog.sina.com.cn/s/blog_6bd7d9430101506p.html
变量:变量替换和赋值;无类型的Shell变量;环境变量;位置参数
引用:全引用和部分引用;命令替换;转义
变量用于保存有用信息,如路径名、文件名、数字等,Linux用户使用变量定制其工作环境,使系统获知用户相关的配置。变量本质上是存储数据的一个或多个计算机内存地址。
变量可分为三类:
本地变量:仅可以在用户当前Shell生命期的脚本中使用的变量,类似于C、C++、Java等编程语言中局部变量
环境变量:适用于所有由登录进程所产生的子进程,环境变量在用户登录后到注销之前的所有编辑器、脚本、程序和应用中都有效.
位置参数也属于变量,它用于向Shell脚本传递参数,是只读的
变量替换和赋值
变量是某个值的名称,引用变量值就称为变量替换
$符号是变量替换符号,如variable是变量名,那么$variable就表示变量的值
变量赋值有两种格式:
variable=value
${ variable=value }
等号的两边可以有空格,这不影响赋值操作;
如果值(value)中包含空格,则必须用双引号括起来;
变量名只能包括大小写字母(a-z和A-Z)、数字(0-9)、下划杠(_)等符号,并且变量名不能以数字开头,否则视为无效变量名
利用unset命令可以清除变量的值,命令格式为:
unset 变量名
readonly可将变量设置为只读,变量一旦设置为只读,任何用户不能对此变量进行重新赋值
variable=value
#先对一个变量进行赋值
readonly variable
#将variable变量设置为只读
无类型的Shell脚本变量
Shell脚本变量是无类型的,这与awk变量是一样的
bash Shell不支持浮点型,只支持整型和字符型,默认情况下,Shell脚本变量是字符型的,
同时,字符型的变量还具有一个整型值,为0;但是,bash
Shell并不要求在定义一个变量时声明其类型
Shell会根据上下文判断出数值型的变量,并进行变量的算术运算和比较等数值操作。判断标准是变量中是否只是包含数字,如果变量只包含数字,则Shell认定该变量是数值型的,反之,Shell认定该变量是字符串
环境变量
定义环境变量的方法
ENVIRON-VARIABLE=value
#环境变量赋值
export ENVIRON-VARIABLE
#声明环境变量
(多一个指定为环境变量而已)
清除环境变量同样是unset命令
env----列出已经定义的环境变量
PWD和OLDPWD
PWD记录当前的目录路径,当利用cd命令改变当前目录时,系统自动更新PWD的值
OLDPWD记录旧的工作目录,即用户所处的前一个目录
PATH
PATH就记录了一系列的目录列表,Shell为每个输入命令搜索PATH中的目录列表
HOME
HOME记录当前用户的根目录
SHELL
SHELL变量保存缺省Shell,缺省的值为/bin/bash
USER和UID
USER和UID是保存用户信息的环境变量,USR表示已登录用户的名字,UID则表示已登录用户的ID
PPID
PPID是创建当前进程的进程号,即当前进程的父进程号
PS1和PS2
提示符变量,用于设置提示符格式
PS1是用于设置一级Shell提示符的环境变量,也称为主提示符字符串,即改变: [root @jselab
~]#
例6-18:PS1变量是[\u@\h
\W]\$,\u、\h、\W和\$表示了特定含义,\u表示当前用户名,\h表示表示主机名,\W表示当前目录名,如果是root用户,\$表示#号,其他用户,\$则表示$号
PS2是用于设置二级Shell提示符的环境变量,
提示符变量中特殊符号及其意义:
模式 意义
\d 以“周 月 日”格式显示的日期 日期信息
\H 主机名和域名 host
\h 主机名 host
\s Shell的类型名称 shell
\T 以12小时制显示时间,格式为:HH:MM:SS time
\t 以24小时制显示时间,格式为:HH:MM:SS time
\@ 以12小时制显示时间,格式为:am/pm
12小时制显示时间
\u 当前的用户名
user
\v bash Shell的版本号
version
\V bash Shell的版本号和补丁号
\w 当前工作目录的完整路径 way
\W 当前工作目录名字
\# 当前命令的序列号
#sequence
\$ 如果UID为0,打印#;否则,打印$
几个重要的配置文件
$HOME/.bash_profile是最重要的配置文件,当某Linux用户登录时,Shell会自动执行.bash_profile文件,如果.bash_profile文件不存在,则自动执行系统默认的配置文件/etc/profile
[gridsphere@jselab ~]# cat .bash_profile
#gridsphere用户的.bash_profile文件
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export JAVA_HOME=/usr/local/jdk1.5.0_04
export
CATALINA_HOME=/home/gridsphere/jakarta-tomcat-5.0.28
export GLOBUS_LOCATION=/usr/local/globus-4.0.4
export CLASSPATH=/usr/local/jdk1.5.0.04/lib
export ANT_HOME=/usr/local/apache-ant-1.7.0
export PATH=$PATH:$JAVA_HOME/bin: $ANT_HOME/bin:
$HOME/bin
如果要使新加入的行立即生效,需要利用source命令执行.bash_profile文件。
source命令也称为“点命令”,即句点符号“.”和source命令是等价的,source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录
. .bash_profile
#注意:句点符号后面用空格与文件名相分隔
source bash_profile
bash Shell的.bash_login文件来源于C Shell的.login文件,bash
Shell的.profile文件来源于Bourne Shell和Korn Shell的.profile文件
当用户登录时,首先查找是否存在.bash_profile文件,若它不存在,则查找是否存在.bash_login文件,若它也不存在,则查找是否存在.
profile文件
位置参数
位置参数(positional
parameters)是一种特殊的Shell变量,用于从命令行向Shell脚本传递参数
$1表示第1个参数、$2表示第2个参数等等,$0脚本的名字,从${10}开始,参数号需要用大括号括起来,如${10}、${11}、${100}……
$*和$@一样,表示从$1开始的全部参数
特殊位置参数 意义
$# 传递到脚本的参数数量
$*和$@ 传递到脚本的所有参数
$$ 脚本运行的进程号
$?
命令的退出状态,0表示没有错误,非0表示有错误
引用
引用指将字符串用引用符号括起来,以防止特殊字符被Shell脚本重解释为其他意义,特殊字符是指除了字面意思之外还可以解释为其他意思的字符
符号 名称 意义
“” 双引号 引用除美圆符号($)、反引号(`)和反斜线(\)之外的所有字符
‘’ 单引号 引用所有字符
`` 反引号 Shell将反引号中内容解释为系统命令
\ 反斜线 转义符,屏蔽下一个字符的特殊意义
全引用(单引用)和部分引用(双引用)
双引号引用除美圆符号($)、反引号(`)和反斜线(\)之外的所有字符,即$、`和\在双引号中仍被解释为特殊意义
在双引号中保持$符号的特殊意义可以引用变量,如“$variable”表示以变量值替换变量名
命令替换
转义
反斜线符号(\)表示转义,当反斜线后面的一个字符具有特殊意义时,反斜线将屏蔽下一个字符的特殊意义,而已字面意义解析它
特殊字符 意义
& 传递到脚本的参数数量
* 0个或多个在*字符之前那个普通字符
+ 匹配1个或多个在其之前的那个普通字符
^ 匹配行首,或后面字符的非
$ 命令的退出状态,0表示没有错误,非0表示有错误
` 反引号,Shell引用符号
“ 双引号,Shell引用符号
| 管道符号或表示“或”意义
? 匹配0个或1个在其之前的那个普通字符
\ 转义符
转义符除了屏蔽特殊字符的特殊意义之外
echo命令的-e 选项表示将转义符后跟字符形成的特殊字符解释成特殊意义
符号 意义
\n 新的一行
\r 返回
\t 表示Tab键
\v或\f 换行但光标仍旧停留在原来的位置
\b 退格键(Backspace)
\a 发出警报声
\0xx ASCII码0xx所对应的字符
阅读(876) | 评论(0) | 转发(0) |