第17章 大数据定制篇-Shell编程
17.1 为什么要学习Shell编程
1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
3)对于大数据程序员来说,需要编写Shell程序来管理集群
17.2 Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。看一个示意图
17.3 Shell脚本的执行方式
17.3.1脚本格式要求
1)脚本以 #!/bin/bash 开头
2)脚本需要有可执行权限
17.3.2编写第一个Shell脚本
需求说明: 创建一个Shell 脚本,输出hello world!
vim hello.sh
#!/bin/bash
echo "hello,world~"
17.3.3脚本的常用执行方式
方式1(输入脚本的绝对路径或相对路径)
说明:首先要赋予 helloworld.sh 脚本的+x权限,再执行脚本
比如 ./hello.sh 或者使用绝对路径 /root/shcode/hello.sh
方式2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。
比如sh hello.sh, 也可以使用绝对路径
17.4 Shell的变量
17.4.1 Shell变量介绍
1) Linux Shell中的变量分为,系统变量和用户自定义变量。
2) 系统变量: $HOME、 $PWD、$SHELL、$USER 等等,比如:echo $HOME 等等..
3) 显示当前 shell 中所有变量: set
17.4.2 shell 变量的定义
基本语法
1) 定义变量:变量名=值
2) 撤销变量: unset 变量
3) 声明静态变量: readonly变量,注意:不能unset
快速入门
1) 案例1:定义变量A
2) 案例2:撤销变量A
3) 案例3:声明静态的变量B=2,不能unset
4)案例4:可把变量提升为全局环境变量,可供其他shell程序使用[该案例后面讲]
#!/bin/bash
#案例1:定义变量A
A=100
#输出变量需要加上$
echoA=$A
echo "A=$A"
#案例2:撤销变量A
unset A
echo "A=$A"
#案例3:声明静态的变量 B=2,不能unset
readonly B=2
echo "B=$B"
#unset B
#将指令返回的结果赋给变量
:<C=`date`
D=$(date)
echo "C=$C"
echo "D=$D"
!
#使用环境变量TOMCAT_HOME
echo "tomcat_home=$TOMCAT_HOME"
17.4.3 shell 变量的定义
定义变量的规则
1) 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(x)
2) 等号两侧不能有空格
3) 变量名称一般习惯为大写,这是一个规范, 我们遵守即可
将命令的返回值赋给变量
1) A=`date`反引号,运行里面的命令,并把结果返回给变量A
2) A=$(date) 等价于反引号
17.5设置环境变量
17.5.1基本语法
1) export 变量名=变量值 (功能描述:将shell变量输出为环境变量/全局变量)
2) source 配置文件 (功能描述:让修改后的配置信息立即生效)
3) echo $变量名 (功能描述:查询环境变量的值)
4) 示意
17.5.2 快速入门
1)在 /etc/profile 文件中定义 TOMCAT_HOME 环境变量
2)查看环境变量 TOMCAT_HOME的值
3)在另外一个 shell 程序中使用 TOMCAT_HOME
注意:在输出 TOMCAT_HOME 环境变量前,需要让其生效.
source /etc/profile
shell 脚本的多行注释
:<
内容
!
17.6位置参数变量
17.6.1介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如: ./myshell.sh 100 200,这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息
17.6.2基本语法
$n (功能描述: n为数字,$0代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用
大括号包含,如${10} )
$* (功能描述: 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$# (功能描述:这个变量代表命令行中所有参数的个数)
17.6.3位置参数变量
案例:编写一个 shell 脚本 position.sh ,在脚本中获取到命令行的各个参数信息
17.6.2基本语法
$* (功能描述: 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$# (功能描述:这个变量代表命令行中所有参数的个数)
17.6.3位置参数变量