例如: 有2个Shell脚本文件 parent.sh 和 child.sh
如果 在 parent.sh 脚本文件中执行了child.sh脚本文件, 那么parent.sh就是父Shell环境, child.sh就是子Shell环境
就是在当前脚本文件中定义全局变量, 这个全局变量可以在当前Shell环境与子Shell环境中都可以使用
export var_name1 var_name2
测试全局变量在子Shell中是否可用, 在父Shell中是否可用
1: 创建2个脚本
touch parent.sh
touch child.sh
2:修改parent脚本文件
vi parent.sh
#!/bin/bash
name="parentName"
export name
#调用子脚本文件
sh child.sh
3: 修改child脚本文件
vi child.sh
#!/bin/bash
echo "parent 中定义的name: ${name}"
4: 执行父脚本
sh parent.sh
5: 结果
$n
用于接收脚本文件执行时传入的参数
$0 用于获取当前脚本文件名称的
$1~$9, 代表获取第一输入参数到第9个输入参数
第10个以上的输入参数获取参数的格式: ${数字}, 否则无法获取
sh 脚本文件 parm1 parm2 ...
创建脚本文件demo.sh文件, 并在脚本文件内部执行打印脚本文件名字, 第一个输入参数, 第二个输入参数
vim demo.sh
#!/bin/bash
#打印当前脚本文件名称
echo "当前脚本文件名称: ${0}"
#打印输入参数
echo "第一个输入参数: ${1}"
echo "第二个输入参数: ${2}"
执行:
$#
获取所有输入参数的个数
打印demo.sh输入参数的个数。
vim demo.sh
#!/bin/bash
#打印当前脚本文件名称
echo "当前脚本文件名称: ${0}"
#输入参数的个数为
echo "输入参数的个数为: ${#}"
#打印输入参数
echo "第一个输入参数: ${1}"
echo "第二个输入参数: ${2}"
$*、$@
1.不使用双引号括起来, 功能一样
$*和$@获取所有输入参数,格式为: $1 $2 ... $n
2.使用双引号括起来
"$*"获取的所有参数拼接为一个字符串, 格式为: "$1 $2 ... $n"
"$@"获取一组参数列表对象, 格式为: "$1" "$2" ... "$n"
使用循环打印所有输入参数可以看出区别
循环语法:
for var in 列表变量
do # 循环开始
命令 # 循环体
done # 循环结束
在demo.sh中循环打印输出所有输入参数, 体验$*
与$@
的区别
#!/bin/bash
#打印当前脚本文件名称
echo "当前脚本文件名称: ${0}"
#输入参数的个数为
echo "输入参数的个数为: ${#}"
#输出所有输入后的参数
echo '使用$*直接输出:' ${*}
echo '使用$@直接输出:' ${@}
#循环输出
echo '循环遍历输出$*所有参数:'
for temp in "$*"
do
echo ${temp}
done
echo '循环遍历输出$@所有参数:'
for temp in "$@"
do
echo ${temp}
done
$?
用于获取上一个Shell命令的退出状态码, 或者是函数的返回值