一、shell变量
变量用于存储管理临时的数据, 这些数据都是在运行内存中的。
1.1 变量类型
1.1.1 系统环境变量
- 是系统提供的共享变量.
- 是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用
shell的配置文件分类
- 全局配置文件
/etc/profile
/etc/profile.d/*sh/etc/bashrc
- 个人配置文件
当前用户 /.bash_profile
当前用户/.bashrc
一般情况下,我们都是直接针对全局配置进行操作.
1.1.1.1 环境变量分类
在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。
- 系统级环境变量: Shell环境加载全局配置文件中的变量共享给所有用户所有Shel程序使用,全局共享
- 用户级环境变量: shell环境加载个人配置文件中的变量共享给当前用户的Shell程序使用,登录用户使用
1.1.1.2 查看系统环境变量
env
set //查看系统环境变量 + 自定义变量 + 函数
1.1.1.3 常用系统环境变量
echo $PATH
1.1.2 自定义变量
1.1.2.1 自定义局部变量
就是定义在一个脚本文件中的变量,只能在这个脚本文件中使用的变量,就是局部变量
语法:var_name=value
- 1.变量名称可以有字母,数字和下划线组成,但是不能以数字开头
- 2.等号两侧不能有空格
- 3.在bash环境中,变量的默认类型都是字符串类型,无法直接进行数值运算
- 4.变量的值如果有空格,必须使用双引号括起来
- 5.不能使用Shell的关键字作为变量名称
查询变量值语法:
echo $var_name //直接使用变量名
echo ${var_name} //花括号
花括号方式适合拼接字符串
增删改查
删除变量语法:
unset var_name
1.1.2.2 自定义常量
就是变量设置值以后不可以修改的变量叫常量,也叫只读变量
语法:readonly var_name
1.1.2.3 自定义全局变量
就是在当前脚本文件中定义全局变量,这个全局变量可以在当前Shel环境与子Shell环境中都可以使用
父子shellI环境介绍
例如: 有2个shell脚本文件 A.sh 和 B.sh
如果在A.sh脚本文件中执行了B.sh脚本文件,那么Ash就是父Shell环境, B.sh就是子shell环境
语法:export var_name1 var_name2
1.1.3 特殊符号变量
1.1.3.1 $n
- $n用于接收脚本文件执行时传入的参数
- $1~$9,代表获取第一输入参数到第9个输入参数
- 第10个参数以上获取参数的格式: ${数字},否则无法获取
- $0 获取当前shell脚本文件名字
执行脚本文件传入参数语法:
sh 脚本文件 传入参数1 传入参数2 ...
#!/bin/bash
#命令1: 打印当前脚本文件名宁
echo "当前脚本文件名称:$O"
命令2: 打印第1个输入参数
echo "第一个输入参数:$1"
命令3: 打印第2个输入参数
echo "第二个输入参数:$2"
命令4:打印第10个输入参数
echo "第十个输入参数不带花括号获取:$10"
echo "第十个输入参数带花括号获取:${10}"
1.1.3.2 $#
- $#获取所有输入参数的个数
1.1.3.3 $* $@
$* $@都是获取所有输入参数,用于以后输出所有参数
- 不使用双引号,则功能是一样的
$* $@都是获取所有输入参数,格式为: $1 $2 ... $n
- 使用双引号,则
"$*"获取所有参数拼接为一个字符串,格式为:"$1 $2 ... $n"
"$@"获取一组参数列表对象,格式为:"$1" $2" ... "$n"
shell中的循环语法:
for var in 列表变量
do #循环开始
命令 #循环体
done #循环结束
在vim编辑界面复制命令,esc退出编辑模式,输入5yy,则复制光标所在行及其下面共计5行
按p就输出了
代码:
echo "参数一:$0"
echo "参数二:$1"
echo "参数三:$2"
echo "参数十一:$11"
echo "参数十一:${11}"
echo "输入所有参数的总数:$#"
echo '使用$*:'$*
echo '使用${*}:'${*}
echo '使用$@: '$@
echo '使用${@}:'${@}
echo '循环遍历$*所有参数:'
for num in "$*"
do
echo $num
done
echo '循环遍历$@所有参数:'
for num in "$@"
do
echo $num
done
执行sh test_darren.sh 1 2 3 4 5 6 7 8 9 10 11输出:
(base) w@w-System-Product-Name:~$ sh test_darren.sh 1 2 3 4 5 6 7 8 9 10 11
参数一:test_darren.sh
参数二:1
参数三:2
参数十一:11
参数十一:11
输入所有参数的总数:11
使用$*:1 2 3 4 5 6 7 8 9 10 11
使用${*}:1 2 3 4 5 6 7 8 9 10 11
使用$@: 1 2 3 4 5 6 7 8 9 10 11
使用${@}:1 2 3 4 5 6 7 8 9 10 11
循环遍历$*所有参数:
1 2 3 4 5 6 7 8 9 10 11
循环遍历$@所有参数:
1
2
3
4
5
6
7
8
9
10
11
可以看出循环遍历的时候,
"$*" 直接输出
"$@"一个个输出
1.1.3.4 $?
用于获取上一个shell命令的退出状态码,或者是函数的返回值
- 每个shell命令的执行都有一个返回值,这个返回值用于说明命令执行是否成功
- 一般来说,返回0代表命令执行成功,非0代表执行失败
1.1.3.5 $$
用于获取当前ShelI环境的进程ID号
查看当前shell环境进程编号
ps -aux|grep bash
注意:
echo "Value is $VAR" #
输出 "Value is" 后接变量的值echo '
Value is $VAR
' #输出字面字符串 "Value is $VAR"
- 在双引号内,可以进行变量替换,即将变量的值插入到字符串中。例如,如果
$VAR
是一个变量,echo "Value is $VAR"
会输出 "Value is" 后接变量的值。 - 在单引号内,变量不会被替换为它们的值。
echo 'Value is $VAR'
会输出字面字符串 "Value is $VAR"。