-
变量
- 变量赋值不用$,访问值时用$,赋值时=两边不留空格,双引号括起来的变量被值替换
- {}标记变量开始和结束,变量名区分大小写,所有bash变量的值变量不区分类型,统一为字符串
-
变量类型
- 环境变量,子进程可以继承父进程环境变量,子进程传递不到父进程
- 全局变量(变量默认类型),不能在子进程传递
- 局部变量(用local声明),只在函数范围内
-
输出变量
- set所有变量
- env环境变量
- export 变量 将一个shell变量提升为环境变量
- unset删除变量
-
执行脚本方式
- ./文件 打开子shell执行文件命令
- bash [-x] 文件 开子进程
- source 文件 . 文件 不开子进程
-
默认变量
- $0调用文件名
- $1第一个命令行参数$2$3…
- $#参数个数(不包括$0)
- $*全部参数(不包括$0)
- $$进程PID号
- $?命令执行后返回状态
main.sh
#! /usr/bin/bash
export env1="kdfsdkf"
g1=443223
function a() {
local l1=2432klf
}
a
echo "---main---"
echo env1 $env1
echo g1 $g1
echo l1 $l1
./sub1.sh
echo "---main---"
echo env1 $env1
echo g1 $g1
echo l1 $l1
echo env2 $env2
echo g2 $g2
echo l2 $l2
./sub2.sh
echo "---main---"
echo env1 $env1
echo g1 $g1
echo l1 $l1
echo env2 $env2
echo g2 $g2
echo l2 $l2
echo env3 $env3
echo g3 $g3
echo l3 $l3
sub1.sh
#! /usr/bin/bash
export env2=9798fds
g2=dsfaf
function b() {
local l2=kjl89
}
b
echo "---sub1---"
echo env1 $env1
echo g1 $g1
echo l1 $l1
echo env2 $env2
echo g2 $g2
echo l2 $l2
sub2.sh
#! /usr/bin/bash
export env3=af9dflkh
g3=bvcbxcx
function c() {
local l3=vcbnpp
}
c
echo "---sub2---"
echo env1 $env1
echo g1 $g1
echo l1 $l1
echo env2 $env2
echo g2 $g2
echo l2 $l2
echo env3 $env3
echo g3 $g3
echo l3 $l3
输出
---main---
env1 kdfsdkf
g1 443223
l1
---sub1---
env1 kdfsdkf
g1
l1
env2 9798fds
g2 dsfaf
l2
---main---
env1 kdfsdkf
g1 443223
l1
env2
g2
l2
---sub2---
env1 kdfsdkf
g1
l1
env2
g2
l2
env3 af9dflkh
g3 bvcbxcx
l3
---main---
env1 kdfsdkf
g1 443223
l1
env2
g2
l2
env3
g3
l3