Shell 变量和引用

变量和引用

author 学习思想交流 开拓者部落(qq群248087140) 旱魃斗天 [email protected] 

变量的本质(内存地址值)
 变量本质上是存储数据的一个或多个计算机内存地址。

变量的分类
 1、本地变量 当前shell生命期
 2、环境变量 适用于由当前用户所产生的子进程
   包括所有的编辑器,脚本,程序中都有效
 3、位置参数 shell的参数,是只读的

变量的替换和赋值

 $:变量替换符 variable 名 $variable 值
 
 变量赋值的两种格式
 variable=value
 ${variable=value}
 如果value中包含空格需要用双引号括起来
 
 unset清楚变量的值
 格式 unset 变量名

 readonly设置只读,设置只读后任何用户不能对此变量进行重新赋值
 variable=value
 readonly variable
 
无类型
bash shell不支持浮点型,只支持整型和字符型
默认字符型
字符型变量还有一个整型值 0。

不要求在定义变量时声明其类型
只包含数字会被shell认为是数值型,反之会被认为是字符串

let 执行运算 let "2+=1"
declare 声明变量的类型 declare -i b 讲b声明为整数
env命令
一个字符串的变量,它的整数的值是0


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 ~]#
PS1  变量是[\u@\h \W]\$,\u、\h、\W和\$表示了特定含义,\u表示当前用户名,\h表示表示主机名,\W表示当前目录名,如果是root用户,\$表示#号,其他用户,\$则表示$号

PS2  是用于设置二级Shell提示符的环境变量


提示符变量中特殊符号及其意义
模式 意义
\d 以“周 月 日”格式显示的日期
\H 主机名和域名
\h 主机名
\s Shell的类型名称
\T 以12小时制显示时间,格式为:HH:MM:SS
\t 以24小时制显示时间,格式为:HH:MM:SS
\@ 以12小时制显示时间,格式为:am/pm
\u 当前的用户名
\v bash Shell的版本号
\V bash Shell的版本号和补丁号
\w 当前工作目录的完整路径
\W 当前工作目录名字
\# 当前命令的序列号
\$ 如果UID为0,打印#;否则,打印$

几个重要的配置文件
如果要使新加入的行立即生效,需要利用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将反引号中内容解释为系统命令
\ 反斜线 转义符,屏蔽下一个字符的特殊意义


全引用和部分引用
双引号引用
$ ` \ 仍被解释字符
 $符号会使变量名替换变量值

空格 保留空格,防止字符串分割

单引号引用
 所有字符被解释为字符本身,不具有特殊意义

命令替换的两种方式

``
$()

转义
特殊字符 意义
& 传递到脚本的参数数量
* 0个或多个在*字符之前那个普通字符
+ 匹配1个或多个在其之前的那个普通字符
^ 匹配行首,或后面字符的非
$ 命令的退出状态,0表示没有错误,非0表示有错误
` 反引号,Shell引用符号
“ 双引号,Shell引用符号
| 管道符号或表示“或”意义
? 匹配0个或1个在其之前的那个普通字符
\ 转义符

echo命令的-e选项表示将转义符后跟字符形成的特殊字符解释成特殊意义


符号 意义
\n 新的一行
\r 返回
\t 表示Tab键
\v或\f 换行但光标仍旧停留在原来的位置
\b 退格键(Backspace)
\a 发出警报声
\0xx ASCII码0xx所对应的字符

你可能感兴趣的:(Shell 变量和引用)