shell变量

来源:互联网 发布:oracle数据库漏洞 编辑:程序博客网 时间:2024/05/21 06:23

变量用于保存有用信息,shell变量分为3种:

  • 本地变量
    仅在当前shell的生命周期内有效
  • 环境变量
    在用户登录的生命周期内有效
  • 参数变量
    向shell脚本传递参数,只读。

变量的基本用法

变量

变量替换和赋值

变量是某个值的名称,引用变量就是变量替换,$是变量替换符号。
变量赋值有2种格式:

var=value${var=value}

说明:

  • 等号2边有空格不影响赋值操作
  • 如果vlaue中含有空格,必须用引号引起来
  • 变量只能包含大小写字母,数字,下划线,数字不可开头
    变量替换格式:
 $var ${var}

利用unset可以清空变量的值:

 unset var

变量赋值的模式:

模式 意义 var=value 赋值 var+value 对已赋值的重设其值 var?value var:?value 对未赋值的显示系统错误 var:=value 对未赋值的,把value赋值给var, var:-value 对未赋值的,把value赋值给var,但value不存在var的地址空间
 color=blank #输出blank ${color:=blue} #输出blank ${color:-blue} unset color  #输出blue ${color:=blue}  #输出blue ${color} unset color #输出blue ${color:-blue} #输出空 ${color}

无类型的shell变量

shell变量不支持浮点数,只支持整数值与字符串。默认情况下是字符串,

declare -i b

declare与typeset,用于定义与限制变量的属性。declare -r 把变量设置为只读。

b=xx09declare -i becho "b=$b" #输出xx09,declare不改变变量的值。let "b=b+1"echo "b=$b" #输出1.字符串变量的整数值为0

环境变量

导入环境变量

export PATH=xxx

位置变量

位置变量是一种特殊shell变量,用于从命令行向脚本传递参数,第一个参数为$1,$2依次类推,大于9的要用大括号${10}。$*和$@都表示全部参数。$#表示参数个数
$* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”$1” “$2” … “$n” 的形式输出所有参数。
但是当它们被双引号(” “)包含时,”$*” 会将所有的参数作为一个整体,以”$1$2 … $n”的形式输出所有参数;”$@” 会将各个参数分开,以”$1” “$2” … “$n” 的形式输出所有参数。

引用

引用指把字符串引用起来,以免被解释为其他意义,shell定义了4种引用

符号 名称 意义 “” 双引号 双引号引用除美圆符号($)、反引号(`)和反斜线()之外的所有字符 ” 单引号 单引号中字符除单引号本身之外都解释为字面意义 “ 反引号 反引号进行命令替换(将命令的标准输出作为值赋给某个变量),等价于$() \ 反斜线 反斜线符号()表示转义,将屏蔽下一个字符的特殊意义,而以字面意义解析它
  • 双引号
    双引号引用除美圆符号($)、反引号()和反斜线(\)之外的所有字符,即$和及\在双引号中仍被解释为特殊意义,利用双引号引用变量能防止字符串分割,而保留变量中的空格。因此双引号的引用方式称为部分引用
  • 单引号

单引号中字符除单引号本身之外都解释为字面意义,不再具备引用变量的功能,单引号的引用方式称为全引用

  • 反引号

反引号进行命令替换(将命令的标准输出作为值赋给某个变量),等价于$(),同时$()形式的命令替换是可以嵌套的。如pwd和$(pwd)等价都为当前工作目录。

  • 反斜线
    反斜线符号()表示转义,将屏蔽下一个字符的特殊意义,而以字面意义解析它。

命令替换

echo `ls *`echo $( ls *)

反引号与$()都可以命令替换,但是$()是可以嵌套的

echo `ls *`echo $( rm $(ls * ))

反引号与$()在处理双反斜线时有区别

echo \\ #输出\echo `echo \\` #输出空白行echo $( echo \\)#输出\
字符 说明 \n 表示新行 \r 表示回车 \t 表示水平的制表符 \v 表示垂直的制表符 \b 表示后退符 \a 表示“警告”(蜂鸣或是闪动) \0xx 翻译成ASCII码为八进制0xx所表示的字符

变量的高级用法

内部变量

字符串处理

bash处理字符串使用awk或者expr。
expr是功能十分强大的命令。可以实现算术操作、比较操作、逻辑操作。
字符串处理

有类型变量

间接变量引用

如果第一个变量的值是第二个变量的名字,那么从第一个变量引用第二变量的值,就叫间接变量引用

var1=var2var2=value#1eval tmp=\$$var1#2tmp=${!var1}

bash数学运算

expr命令

表达式 含义 ARG1 | ARG2 若ARG1 的值不为0 或者为空,则返回ARG1,否则返回ARG2 ARG1 & ARG2 若两边的值都不为0 或为空,则返回ARG1,否则返回 0 ARG1 < ARG2 ARG1 小于ARG2 ARG1 <= ARG2 ARG1 小于或等于ARG2 ARG1 = ARG2 ARG1 等于ARG2 ARG1 != ARG2 ARG1 不等于ARG2 ARG1 >= ARG2 ARG1 大于或等于ARG2 ARG1 > ARG2 ARG1 大于ARG2 ARG1 + ARG2 计算 ARG1 与ARG2 相加之和 ARG1 - ARG2 计算 ARG1 与ARG2 相减之差 ARG1 * ARG2 计算 ARG1 与ARG2 相乘之积 ARG1 / ARG2 计算 ARG1 与ARG2 相除之商

bc运算器

(( )) & [ ]

表达式 含义 | 位或 + || 若前后两者都不为0,则返回1,否则返回0 & 位与 + && 若前者为0,不再对后者进行处理,否则对后者处理,后者不为0时返回1 < <= == != >= > + - * / %

系统给定的特殊变量

变量 意义 $0 当前脚本的名字 $n 传递给脚本或者函数的参数,n表示第几个参数 $# 传递给脚本或函数的参数个数 $* 传递给脚本或函数的所有参数 $@ 传递给脚本或者函数的所有参数 $$ 当前shell脚本进程的PID $? 函数返回值,或者上个命令的退出状态 $BASH BASH的二进制文件问的路径 $BASH_ENV BASH的启动文件 $BASH_VERSINFO[n] BASH版本信息,有六个元素 $BASH_VERSION BASH版本号 $EDITOR 脚本所调用的默认编辑器 $EUID 当前有效的用户ID $FUNCNAME 当前函数名 $GROUPS 当前用户所属组 $HOME 当前用户家目录 $HOSTTYPE 主机类型 $LINENO 当前行号 $OSTYPE 操作系统类型 $PATH PATH路径 $PPID 当前shell进程的父进程ID $PWD 当前工作目录 $SECONDS 当前脚本运行秒数 $TMOUT 不为0时,超过指定的秒将退出shell $UID 当前用户ID