1、基础知识
1.1、简单介绍
变量包括两部分:变量名(不变的) + 变量值(变化的)
表现样式:变量名=变量值
功能定位: 通过变量名的调用,达到快速执行批量的效果
1.2、注意事项
变量的全称应该成为变量赋值,简称变量,在工作中,我们一般只xx是变量,其实是是将这两者作为一个整体来描述了。准确来说,我们一般所说的变量其实指的是:变量名。
1.3、shell变量分类
1.3.1、本地变量
1.3.2、全局变量
1.3.3、shell内置变量
2、变量详解
2.1、本地变量【=】
本地变量就是:在当前系统的某个环境下才能生效的变量,作用范围小。
本地变量包含两种:普通变量和命令变量
2.1.1、普通变量
类型 样式 特点
无引号 变量名=变量值 变量值必须是一个整体,中间没有特殊字符 "=" 前后不能有空格
单引号 变量名='变量值' 原字符输出
双引号 变量名="变量值" 变量值先解析,后整合
习惯:数字不加引号,其他默认加双引号
2.1.2、命令变量
类型 样式 特点
反引号 变量名=`命令` ``反引号
小括号 变量名=$(命令) $()
执行流程:
1、执行`或者$()范围内的命令
2、将命令执行后的结果,赋值给新的变量名A
2.2、全局变量【export、unset】
2.2.1、什么是全局变量
在当前系统的所有环境下都能生效的变量,可以基于env命令查看
2.2.2、定义方法
# 设置值
export 变量=值
# 查看
$变量名 、"$变量名"、${变量名}、"${变量名}"
# 取消
unset 变量名
2.3、内置变量
2.3.1、属性含义
符号 意义
$0 获取当前脚本文件名
$n 获取脚本的第n个参数值,样式:$1,${10}
$# 获取脚本参数的总个数
$? 获取上一个指令的状态返回值(0为成功,非0为失败)
$* 获取所有参数,存放到一个字符串中
$@ 获取所有参数,存放到一个列表里面
$$ 获取当前程序进程号
$! 获取上一个进程的id
2.3.2、$0【获取脚本的名称】
cat << 'CAT_END' > test.sh
#!/bin/bash
echo "脚本名字: $0"
CAT_END
# sh test.sh
脚本名字: test.sh
2.3.3、$n【获取位置参数值】
cat << 'CAT_END' > test.sh
#!/bin/bash
echo "one parmer1: $1"
echo "two parmer1: $2"
CAT_END
# sh test.sh ptest1 ptest2
one parmer1: ptest1
two parmer1: ptest2
2.3.4、$#【获取参数总数量】
cat << 'CAT_END' > test.sh
#!/bin/bash
echo "parmer count number $#"
CAT_END
# sh test.sh ptest1 ptest2
parmer count number 2
2.3.5、$?【获取文件执行或者命令执行的返回状态值】
# bash test
/usr/bin/test: /usr/bin/test: 无法执行二进制文件
# echo $?
126
# ls# echo $?
0
2.3.6、$$【获取shell脚本运行进程id】
cat << 'CAT_END' > test.sh
#!/bin/bash
echo "pid $$"
CAT_END
# sh test.sh
pid 34956
2.3.7、$!【获取上一条命令的进程号】
# sleep 15 &
[1] 34963
# echo $!
34963
2.4、$@ 与 $* 的区别实践
cat << 'CAT_END' > test.sh
#!/bin/bash
# string
for arg in "$*";do
echo '$*获取到的参数内容:' $arg
done
# list
for arg in "$@";do
echo '$@获取到的参数内容:' $arg
done
CAT_END
# sh test.sh p1 p2
$*获取到的参数内容: p1 p2
$@获取到的参数内容: p1
$@获取到的参数内容: p2