1 定义
定义变量时 your_name="xx
除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in `ls /etc` 或 for file in $(ls /etc)
2 变量类型
运行shell时,会同时存在三种变量:
(1)局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
(2)环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
(3)shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
3 使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="xx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如:
for skill in string; do echo "${skill}Script" done
4 删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
参考链接:Shell 变量 | 菜鸟教程 (runoob.com)
5 变量作为参数传递
(1)a脚本的参数传递至b 脚本
脚本实例场景:
a.sh:#定义变量值,并调用 b.sh
sql_file_path=xx/xx/xx
data_file_path=xx/xx/xx
sh xx/b.sh ${sql_file_path} ${data_file_path}
b.sh:# 接受 a.sh的传参,并执行逻辑
#!/bin/bash
function usage {
echo "Usage: hive_export_execution.sh <sql_file_path> <data_file_path>"
}
if [ $# -lt 2 ]
then
usage
exit 4
fi
export sql_file_path=$1
export data_file_path=$2
set -f
sql_content=`envsubst<"${sql_file_path}"` #envsubst将环境变量的重新更名
envsubst参考链接:
echo "${sql_content}"
hive --hiveconf hive.metastore.uris=${xx} -e "${sql_content}" > ${data_file_path}
export ret_code=$? #保留退出状态
set +f
set -e
exit $ret_code
(2)a脚本引用b脚本的方法和变量
a.sh:# 引用b脚本并调用其方法和变量
#!/bin/bash
source ${resource_dir}/read_hive_data_test.sh
execute_num
echo $aa
b.sh:# 定义通用的方法和变量
#!/bin/bash
aa='hello world'
function execute_num(){
echo "调用成功"
}