(二)Shell变量
二、Shell变量
1. 系统变量
$HOME
:获取用户家目录,/Users/sangxiaoqian
$PWD
: 获取当前目录
$SHELL
: 获取系统默认解析器
$USER
: 获取当前用户名,sangxiaoqian
$PATH
: 获取系统的环境变量,/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
2. 自定义变量
定义变量语法:
- 定义变量:
变量=值
注意,shell对空格不宽容,定义语法中不能有多余空格,该有空格的地方必须有空格
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % A=1
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % echo $A
1
-
撤销变量:
unset 变量
-
声明静态变量(只读变量):
readonly 变量
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % readonly B=3
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % echo $B
3
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % unset B
-bash: unset: B: cannot unset: readonly variable
注意:静态变量不能用unset撤销
- 全局变量:
export 变量
全局变量可供全局shell程序使用。
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % B=1
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % vim helloworld.sh
#!/bin/bash
echo "Helo,World!"
echo $B
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % sh helloworld.sh
Hello,World!
发现没有打印全局变量,export将局部变量提升为全局变量,供其他Shell使用
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % export B
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % sh helloworld.sh
Hello,World!
1
定义变量规则:
- 变量名可以有字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
- 等号两侧不能有空格
- 在bash中,变量默认类型都是字符串类型,复发直接进行数值运算
- 变量的值如果有空格,需要使用双引号或单引号括起来
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % A=1' '2
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % echo $A
1 2
3. 特殊变量
1. $n
n为数字,$0
代表该脚本名称,$1-$9
代表第1个到第9个参数,10以上的参数需要用大括号包裹,如$10
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % touch param.sh
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % vim param.sh
#!/bin/bash
echo "$0 $1 $2 $3"
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % bash param.sh
param.sh
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % bash param.sh lisi wangwu zhagnliu
param.sh lisi wangwu zhagnliu
2.$#
获取脚本输入参数的个数
#!/bin/bash
echo "$0"
echo "$#"
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % sh param.sh
param.sh
0
3.$*
, $@
$*
: 代表命令行中的所有参数,将命令行的所有参数看成一个整体
$@
: 代表命令行中的所有参数,不过把每个参数区分对待
"$*"
和"$@"
分别代表整体参数和单个参数
$*
和$@
都代表整体参数,没有区别
#!/bin/bash
for i in "$*"
do
echo "#*: $i"
done
for i in "$@"
do
echo "#@: $i"
done
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % sh param.sh var1 var2
#*: var1 var2
#@: var1
#@: var2
4.$?
最后一次执行的命令的返回状态:
- 0: 代表上一个命令正确执行
- 非0:代表上一个命令执行不正确
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % sudo ./param.sh
sudo: ./param.sh: command not found
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % echo $?
1
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % chmod u+x param.sh
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % ./param.sh
./param.sh
0
sangxiaoqian@MBP-GDQ7F0673C-2307 HelloShell % echo $?
0
5.$val
使用$val
取值