shell变量

shell变量

1、变量定义

1.1 变量有什么用

但我们需要使用到重复性的东西;或者说一些当前环境的一些特有的东西,比如IP地址;或者一些需要灵活修改的地方,比如版本号;这时候我们就需要定义变量,可以更加便捷的进行维护和修改,节省时间

1.2 定义变量

格式: 变量名=变量值

(定义变量时=之间不能使用空格)

比如:

name=nginx		##字符串
version=18		##整形
num=8.8			##浮点数

1.3 取消变量

格式: unset 变量名

比如:

unset name
unset version
unset num

1.4 有类型变量

## declare -i 变量变成整数

[root@controller shell]# declare -i num=test
[root@controller shell]# echo $num
0

## declare -r 变量变成只读

[root@controller shell]# declare -r num
[root@controller shell]# num=10
-bash: num: readonly variable

## declare -x 导出环境变量

[root@controller shell]# declare -x
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="controller"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"

2、变量分类

根据变量的作用域和生命周期分为四类:本地变量、环境变量、全局变量、内置变量

2.1 本地变量

自己定义的变量,定义在终端或者脚本里,脚本或者终端结束即失效;如果是脚本定义的变量只能脚本内部调用,定义在终端的只能在终端使用。

[root@controller ~]# test=10
[root@controller ~]# echo $test
10
[root@controller ~]# cat test.sh
#!/bin/bash
age=18
echo $age
[root@controller ~]# bash test.sh 
18

2.2 环境变量

定义在root下的.bashrc或者.bash_profile 文件中,只能本地用户使用,脚本无法调用,用env查看当前用户的环境变量

[root@controller ~]# vi .bashrc 
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
version=18   ##定义一个本地变量
export test=20 ## 定义一个全局变量
fi
需要重新登入会话
[root@controller ~]# echo $version
18
[root@controller ~]# bash test.sh 
20

2.3 全局变量

export命令将本地变量输出为当前shell的环境变量,脚本和当前shell都可以调用到变量,克隆会话变量将会失效;在/etc/profile和/etc/bashrc永久定义变量,所有用户及shell都可以调用到。

输出全局变量printenv

[root@controller ~]# export test=20
[root@controller ~]# echo export age=18 >> /etc/profile
[root@controller ~]# source /etc/profile
[root@controller ~]# bash test.sh 
18
20

2.4 内置变量

系统变量,shell已经定义好名字和作用的变量

$? 执行上条命令后返回的状态

​ 0:运行成功

​ 127: 命令不存在

​ 126:权限不够

​ 182: 没有文件或目录

$$:当前进程号

$!:后台运行的最后的一个进程号

!$:调用最后一条命令的参数

!!:调用历史最后一条命令

#!/bin/bash
echo "\$0 = $0"  			## 当前进程号
echo "\$# = $#"  			## 脚本后面参数的个数
echo "\$* = $*"  			## 后面参数当作一个整体输出
echo "\$@ = $@"          	## 输出后面所有参数
echo "\$1 = $1"           	## 第一个参数
echo "\$2 = $2"             ## 第二个参数
echo "\$3 = $3"            	## 第三个参数
echo "\$11 = ${11}"        	## 第十个以后参数要加{}
echo "\$12 = ${12}"       	## 第十二个参数
[root@controller shell]# bash 1.sh 1 2 3 4 5 6 7 8 9 10 11 12 13
$0 = 1.sh
$# = 13
$* = 1 2 3 4 5 6 7 8 9 10 11 12 13
$@ = 1 2 3 4 5 6 7 8 9 10 11 12 13
$1 = 1
$2 = 2
$3 = 3
$11 = 11
$12 = 12

2.5 总结

变量类型作用域生命周期
本地变量当前shell环境(子shell不能使用)脚本或者终端结束
环境变量当前shell环境或者子shell当前进程结束
全局变量所以用户和shell关机
内置变量所以用户和shell关机

3、其他变量

3.1 取出目录和文件:

[root@controller ~]# A=/root/shell/
[root@controller ~]# echo $A
/root/shell/
[root@controller ~]# dirname $A
/root
[root@controller ~]# basename $A
shell

3.2 变量内容删除或替换

一个%代表从右往左删除一个key,两个代表去掉最大一个key

一个#代表从左往右删除一个key,两个代表去掉最大一个key

[root@controller ~]# url=www.baidu.com
[root@controller ~]# echo ${#url}
13
[root@controller ~]# echo ${url%.*}
www.baidu
[root@controller ~]# echo ${url%%.*}
www
[root@controller ~]# echo ${url#*.*}
baidu.com
[root@controller ~]# echo ${url##*.*}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值