目录
1、Shell脚本变量简介
2、变量的作用
3、变量的类型
4、自定义变量
4.1自定义变量命名要求
4.2定义与查看变量
4.3赋值时使用的引号
4.4从键盘输入内容为变量赋值
4.5 变量的运算
4.5.1整数变量的运算
4.5.2浮点数运算
5、环境变量
5.1环境变量配置文件
5.2设置变量的作用范围
5.2.1export命令
5.2.2将变量名添加进配置文件/etc/profile
6、只读变量
7、位置变量
8、预定义变量
1、Shell脚本变量简介
变量是计算机语言中能储存计算结果或能表示值的抽象概念。保存将来会变化的数据,即使数据变
化,直接调用变量即可。
Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或
系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。
2、变量的作用
用来存放系统和用户需要使用的特定参数(值)
-
变量名:使用固定的名称,由系统预设或用户定义
-
变量值:能够根据用户设置、系统环境的变化而变化
3、变量的类型
环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改 有些规定好的变量 放在那里让你使用
4、自定义变量
4.1自定义变量命名要求
4.2定义与查看变量
变量名以字母或下划线开头,区分大小写,建议全大写
变量名=变量值
echo $变量名
使用大括号{}定义变量的范围,将变量名分隔出来
4.3赋值时使用的引号
- 双引号" ":允许通过$符号引用其他变量值
- 单引号' ':禁止引用其他变量值,$视为普通字符,
- 反撇号``:命令替换,提取命令执行后的输出结果与$( )效果相同
- {}可以分隔变量值
- 定义变量时中间有特殊字符时 比如空格 用单引号或者双引号括起来
双引号与单引号
定义变量时中间有特殊字符
单引号与$()
4.4从键盘输入内容为变量赋值
格式:read 变量名
[root@localhost ~]# vim score.sh
--------------------------------------------------
#!/bin/bash
#输出成绩脚本
echo -n "请输入你的成绩:"
read score
echo $score
[root@localhost ~]# bash score.sh
请输入你的成绩:99
99
4.5 变量的运算
4.5.1整数变量的运算
shell默认只支持整数的运算
运算符:+ 加法
、- 减法
、* 乘法
、/除法
、% 取余
格式:expr 变量1 运算符 变量2 [运算符 变量3](计算乘法时,需要使用“\”转义符)
var=$ ( expr变量1运算符变量2)
var=$((变量1 运算符 变量2))
var=$[ 变量1 运算符 变量2 ]
let var=变量1 运算符 变量2
let i++ i=$[$i+1]
let i-- i=$[$i-1]
let i+=2 i=$[$i+2]
let i/=2 i=$[$i/2]
4.5.2浮点数运算
echo "浮点运算字符串" | bc
echo "scale=小数位数;浮点运算字符串" | bc
awk 'BEGIN {print 浮点运算字符串}'
5、环境变量
使用env查看环境变量
常用环境变量
- $USER 表示用户名称
- $HOME 表示用户的宿主目录
- $LANG 表示语言和字符集
- $PWD 表示当前所在工作目录
- $PATH 表示可执行用户程序的默认路径
环境变量:
5.1环境变量配置文件
四个系统级的环境配置变量/etc/profile /etc/bashrc 或者(自己家目录中的)/root/.bash_profile/ root/.bashrc .bash_profile /root/.bashrc
系统每次启动都会自动执行 /etc/profile 文件里的命令,这个文件是对全局有效的(所有的shell环境和用户)
- ~/.bash_profile ~/.bashrc
不同用户登录系统 会自动执行 自己家目录中的 ~/.bash_profile 文件中的命令,自动执行 ~/.bashrc ~/.bashrc 当前用户每切换一个shell环境都会自动执行
/etc/bashrc 针对所有用户的,用户每切换一个shell环境都会自动执行
5.2设置变量的作用范围
5.2.1export命令
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。
可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用
export 变量名
export 变量名=变量值
5.2.2将变量名添加进配置文件/etc/profile
- 子进程中定义一个变量 退出子进程当前环境,回到父进程变量值不存在
终端1
[root@localhost ~]# export k=key
[root@localhost ~]# echo $k
key
终端2
[root@localhost ~]# echo $k
##没有任何输出
[root@localhost ~]#
所以,在子进程中定义一个变量 退出子进程当前环境 export变量就会自动消失,换个终端打开shell定义的全局变量 export也会消失所以定义全局变量时通常加入 配置文件/etc/profile
使用export全局变量,将export放入/etc/profile
[root@localhost ~]#vim/etc/profile
---------------------------
export number=11
[root@localhost ~]#source /etc/profile ##刷新配置文件
[root@localhost ~]#echo $number
11
6、只读变量
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
最快方法重启
7、位置变量
位置变量也称为位置参数,使用$1、$2、$3、…、$9 、${10}表示
$10:表示位置变量$1后面跟着0
[root@localhost ~]# vim 1.sh
#!/bin/bash
#位置变量
echo $3
echo ${10}
echo $10
[root@localhost ~]# bash 1.sh a b c 4 5 6 7 q y d w
c ##对应$3
d ##对应${10}
a0 ##对应$10
8、预定义变量
$0 : 代表脚本本身
$# : 代表脚本后面跟的参数(位置变量)的个数
$* : 不加双引号的话 $* 和$@都代表脚本后面跟的所有参数,加上双引号 "$*" 会把所有参数当做一个整体的参数(此时参数数量为1)去看待
$@ : 加上双引号 "$@" 会把脚本后面跟的每一个参数当做一个个体去看待
$? :代表上一条命令或者脚本执行后返回的状态码,返回值为0表示执行正确,为非0值表示执行异常 还可以在return 退出函数时获取的返回值(0-255,超过部分 %256 取余)
$$:代表当前进程
[root@localhost ~]# vim 1.sh
#!/bin/bash
echo "$0"
[root@localhost ~]# bash 1.sh
1.sh
[root@localhost ~]# vim 1.sh
#!/bin/bash
echo $# ##输出脚本后跟的参数个数
[root@localhost ~]# bash 1.sh 1 2 3
3