shell 之变量详解及实战

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 "调用成功"
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值