Shell脚本编程大数据ETL方向
一、Shell概述
Shell是一个命令解释器,接收应用程序/用户命令,然后调用操作系统内核
特点:易编写、易调试、灵活性强
二、Shell解析器
-
Linux提供的Shell解析器:
-
/bin/sh
-
/bin/bash
-
/sbin/nologin
-
/bin/dash
-
/bin/tcsh
-
/bin/csh
-
-
bash、sh的关系:
- 系统默认使用bash解析器
- sh是bash的软连接,bash最终调用的是sh
三、Shell脚本入门
-
脚本格式:以#!/bin/bash开头:指定解析器为bash
cd /home/Cryueh/ #进入目录 vim helloworld.sh #创建脚本文件并编辑 #!/bin/bash //指定解析器 echo "helloworld" #输出语句
-
执行方式:以sh、bash执行,也可直接执行(需权限)
sh helloworld.sh #使用sh执行当前目录下的脚本文件 bash helloworld.sh #使用bash执行当前目录下的脚本文件 sh /home/Cryueh/helloworld.sh #使用sh执行绝对路径下的脚本文件 bash /home/Cryueh/helloworld.sh #使用bash执行绝对路径下的脚本文件 chmod 777 helloworld.sh #赋予权限 ./helloworld.sh #相对路径 /home/Cryueh/datas/helloworld.sh #绝对路径
-
多命令处理:
touch batch.sh #创建脚本文件 vi batch.sh #编辑脚本文件 #!/bin/bash //指定解析器 cd /home/Cryueh #进入目录 touch cls.txt #创建文件 echo "I love cls" >>cls.txt #追加内容 sh batch.sh #指定脚本文件
四、Shell变量
1. 系统变量
-
常用系统变量
- $HOME:当前用户的家目录
- $PWD:当前所在目录
- $SHELL:当前解析器
- $USER:当前用户
echo $HOME #查看系统变量之查看用户家目录 set #当前Shell中的所有变量
2. 自定义语法
-
基本语法
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly [变量],注意:不能unset
- 晋升为全局变量:export [变量名]
-
变量定义规则
-
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
-
等号两侧不能有空格
-
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
-
变量的值如果有空格,需要使用双引号或单引号括起来
-
-
export [变量名]
- 可把变量提升为全局环境变量,可供其他Shell程序使用
A=5 #定义变量A echo $A A=8 #给变量A重新赋值 echo $A unset A #撤销变量A echo $A readonly B=2 #声明静态的变量B=2,不能unset echo $B #在bash中,变量默认类型都是字符串类型,无法直接进行数值运算 C=1+2 echo $C 1+2 #变量的值如果有空格,需要使用双引号或单引号括起来 D=I love banzhang -bash: world: command not found D="I love banzhang" echo $A #可把变量提升为全局环境变量,可供其他Shell程序使用 export 变量名 vim helloworld.sh
3. 特殊变量:$n
$n 功能描述:
- n为数字
- $0代表该脚本名称
- $1-$9代表第一到第九个参数
- 十以上的参数需要用大括号包含,如${10}
//输出该脚本文件名称、输入参数1和输入参数2 的值
touch parameter.sh #创建文件
vim parameter.sh #编辑文件
#!/bin/bash #指定编译器
echo "$0 $1 $2" #定义变量
chmod 777 parameter.sh #赋予权限
./parameter.sh cls xz #执行脚本加入变量值
./parameter.sh cls xz #显示结果
4. 特殊变量:$#
$# 功能描述:获取所有输入参数个数,常用于循环
#获取输入参数的个数
vim parameter.sh #创建编辑文件
#!/bin/bash #指定编译器
echo "$0 $1 $2" #定义变量
echo $#
chmod 777 parameter.sh #赋予权限
./parameter.sh cls xz #执行脚本加入变量值
parameter.sh cls xz #显示结果
2 #显示结果
5. 特殊变量: ∗ 、 *、 ∗、@
-
∗ 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 ∗ ∗ 所 有 ∗ ∗ 的 参 数 , * 功能描述:这个变量代表命令行中**所有**的参数, ∗功能描述:这个变量代表命令行中∗∗所有∗∗的参数,*把所有的参数看成一个整体
-
@ 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 ∗ ∗ 所 有 ∗ ∗ 的 参 数