Shell变量

  为使用shell编程更加有效,系统提供了一些shell变量。shell变量可以保存注诸如路径名、文件名、或者数字这样的变量。从这一点上看,shell编程中,变量至关重要。

本地变量

  • 本地变量在用户现有的shell生命期内有效。
  • 定义本地变量:变量名=变量值的格式MYVAR=”test

    注意=左右不要有空格

  • 使用本地变量$MYVAR,,如: echo $MYVAR or echo ${MYVAR}

  • set命令显示本地所有的变量

每登录一个终端,都会运行一个shell程序,定义一个本地变量,这个本地变量,就保存在这个shell程序中;如果再新登录,将启动新的shell程序,与原来的shell不同,之前定义的本地变量只存活于定义时候的shell,与新的shell没关系。

只读变量

格式:readonly variablename

readonly的变量,不能被清除

环境变量

  • 环境变量用于所有用户进程,具体一点是针对用户级别的配置,因用户不同而不同。
  • 配置文件:$HOME/.bash_profile (/etc/profile,所有用户都使用的profile)
  • export 声明环境变量 export myvar=”tttt”
  • 查看环境变量env命令

变量替换(显示变量)

  • 用变量的值替换它的名字
  • 在变量名前加$,使用echo命令可以显示单个变量取值。
${parameter} 变量的内容会被展开
${parameter:-word} 当变量没有被设定,或是为空值的时候,word就会被展开。否则,变量被展开。--变量不存在,显示word
${parameter:=word} 当变量没有被设定,或是为空值的时候,word就会被展开,而且这个值会被代入到变量里面。若不是,则变量内容被展开。--变量不存在,显示word,且位变量赋值为word
${parameter:?word} 当变量没有被设定,或是为空值的时候,会将word显示在标准错误输出,并结束。若不是的话,则变量的内容会被展开。--变量不存在,显示word,并结束。
${parameter:+word} 当变量没有被设定,或是为空值的时候,则不会展开任何东西。否则会展开word的内容。--变量存在显示word

清除变量

  • unset命令清除变量unset testvar
  • readonly的变量,不能被清除

位置变量

  • 形如:$0 $1 $2 $3 …$9,其中$0代表bash文件名称 其他就是命令行参数
  • 示例代码
#!/bin/bash
#param
echo "脚本的名字 $0"
echo "parm 1: $1"
echo "parm 2: $2"
echo "parm 3: $3"
echo "parm 4: $4"
echo "parm 5: $5"
  • 向脚本中使用位置参数
#!/bin/bash
#param.sh
find /usr/lib/ -name $1 –print 
#查找目录下文件名是第一个参数的文件

标准变量

  • bash默认建立了一些标准环境变量,可在/etc/profile中定义
  • EXINIT 定义一些vim的初始化参数
  • HOME echo $HOME–用户家目录
  • FS 在linux系统中字符之间的间隔
    测试echo $IFS
  • LOGNAME
    测试 echo $LOGNAME
  • MAIL–当前登录用户,其邮箱在什么地方存储
    测试 echo $MAIL
  • TERM 登录服务器,终端类型vt100
  • PATH标准变量

    • 可以使用set |grep “PATH”来查看path配置路径
    • 当我们在shell运行一个程序时,shell会从path路径中查找程序。
  • TZ 时区

  • PS1 提示符
    • echo $PS1
    • PS1=’[\u@\h \w] $’ u代表用户名 h主机名 w代表当前目录
    • 可以自己更改PS1
    • 通过sudo grep -r "PS1" /etc/命令可以查看在哪一个文件修改PS1
  • PS2 –“> ” 大尖括号+空格。

    • 在一行上面运行多个命令
    • 一条命令没有写完,自动换行后,shell提示符
    • 和c语言宏定义一样使用’\’作为续行符
  • PWD–当前路径

  • SHELL 我当前运行的shell时那个shell解析器
  • 其他:MAILCHECK、MAILPATH、MANPATH、TERMINFO

特殊变量

  • $# 传递到脚本的参数个数
  • $* 以一个字符串形式显示所有向脚本传递的参数,与位置变量不同,该选项参数可以超过9个。$*为"1 2 3"(一起被引号包住)
  • $$ 脚本运行的当前进程ID号
  • $! 后台运行的最后一个进程的进程ID
  • @*相同,但是使用时加引号,$@为"1" "2" "3"(分别被包住)–所以需要使用引号括起来,否则展开以后容易解释错误,因为他只解释第一个参数。
  • $- 显示shell使用的当前选项,与set命令功能相同
  • $? 显示前一条命令的退出状态。0表示没有错误,其他任何值表明有错误
#!/bin/bash
#param

echo "脚本的名字 $0"
echo "parm 1: $1"

echo "parm 2: $2"
echo "parm 3: $3"
echo "parm 4: $4"
echo "parm 5: $5"
echo "显示参数的个数:$#"

echo "显示脚本全部参数:$*"
echo "显示前一命令运行后状态:$?" 

影响变量的命令

  • declare 设置或显示变量

    • -f 只显示函数名
    • -r 创建只读变量(declare和typeset)
    • -x 创建转出变量
    • -I 创建整数变量
    • -使用+代替-,可以颠倒选项的含义(只读变量除外)
  • export 用户创建传给shell的变量,即:创建环境变量

    • – 表明选项结束,所有后续参数都是实参
    • -f 表明在“名-值”对中的名字是函数名。
    • -n 把全局变量转换成局部变量。换句话说,命令的变量不在传给shell
    • -p 显示全局变量列表
  • readonly 用于显示或者设置只读变量
    • – 表明选项结束
    • -f 创建只读变量
  • set 使用set命令显示所有本地定义的shell变量。
    • 设置或者重设各种shell
    • set -a
  • env 查看所有环境变量。
  • shift [n] 用于移动位置变量,调整位置变量,是$3的值赋予$2,$2的值赋予$1
  • typeset 用于显示或设置变量
    • 是declare的同义词
  • unset 用于取消变量的定义
    • – 表明选项结束
    • -f 删除只读变量,但不能删除从shell环境中指定的全局变量和函数。如:PATH,PS1,PS2,PPID,UID,EUID等的设置。
  • 示例代码
#!/bin/bash
#param

echo "脚本的名字 $0"
echo "parm 1: $1"

echo "parm 2: $2"
echo "parm 3: $3"
echo "parm 4: $4"
echo "parm 5: $5"

echo "开始shift 2"
shift 2 

echo "parm 1: $1"
echo "parm 2: $2" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值