问题描述:
在进行Linux测试时编写脚本是必不可少的。最近经常使用Linux,感觉太频繁地敲击键盘有些累了,于是想到了Shell脚本。可以把太多的命令写成一个脚本,这样每次执行一遍 shell文件,就可以省去了敲击键盘的时间。于是在网上搜了一些有关Linux下脚本编程的内容。
下面是编写shell脚本的具体步骤:
一.创建shell脚本
首先创建一个目录,它将托管我们所有的 bash
脚本。
脚本文件新建可以用touch命令,也可以直接用文本编辑器如vi、vim等新建并编辑,文件名为*.sh。shell脚本文件的名称可以任意,但为了避免被误认为是普通文件,后缀名为.sh代表是一个shell脚本文件(例如后缀名为.py代表是一个python文件)我一般会把shell脚本放进usr/local/bin里能更方便我们使用。
二.编写内容
我将以zookeeper群起脚本进行讲解
内容如下:
#!/bin/bash
case $1 in
"start"){
for i in hadoop01hadoop02 hadoop03
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop01 hadoop02 hadoop03
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop01 hadoop02 hadoop03
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac
-
“#!/bin/bash”必须放在第一行
-
这一行被称为shebang 行,在某些文献中,它被称为hashbang 行,这是因为它以两个字符hash ‘#’ 和bang ‘!’ 开头。
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。
-
2、 注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。
如同其他编程语言一样,我们在编写脚本时也应该尽可能地添加注释,那么即使相当长的时间内没有使用该脚本,我们也能在很短的时间内明白该脚本的作用及工作原理。
"start"){
for i in hadoop01hadoop02 hadoop03
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;#集群启动"stop"){
for i in hadoop01 hadoop02 hadoop03
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};; #集群关闭3.、变量
在其他编程语言中您必须使用变量。
在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:变量名=值
取出变量值可以加一个美元符号($)在变量前面
比如我们这里变量是i
"start"){
for i in hadoop01hadoop02 hadoop03
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;就在i前加个美元符号
4、流程控制语句
我们zookeper群起脚本里使用的是
for 条件循环语句
for的语法格式为:
for x in xx
do ...
done
使用 for循环语句从列表文件中读取多个用户名。
5.将 shell 脚本添加到 PATH(以便它可以从任何目录运行)
-
前面使用
./zk.sh
来运行脚本;如果省略前导./
;./ 代表当前目录Bash
认为你正在尝试运行名为scripts.sh
的命令。当你在终端上运行任何命令时,shell
就在存储在PATH
变量中的一组目录中查找该命令。 -
若显示权限不足,赋予权限chmod xxx.sh
如果你想从任何地方运行你的 bash 脚本,就像它是一个常规的 Linux 命令,需要将你的 shell 脚本的位置添加到 PATH 变量中。
获取脚本目录的位置(假设在同一目录中),使用 PWD 命令:
pwd3.使用 export 命令将脚本目录添加到 PATH 变量。
-
export PATH=$PATH:/local
4.我们这里zookeeper集群启动有三个命令
stop(关闭) start(开始) status(查看状态)
解决问题:
最后在我启动zookeeper集群时,报了以下错误:
每台主机的java_home都已经配置,java-version也能正常执行,且单独运行zkServer.sh start可以正常启动zookeeper。
这时我们进入每台主机的zookeeper下的bin目录
修改zkServer.sh文件,在文件开始部分加上自己的java路径,export JAVA_HOME=/opt/modlue/jdk1.8.0_162
我们在启动一下集群:
最后查看一下:
嘻嘻,成功!!!
这周我们的脚本学习就结束了喔