Shell笔记-----编写Elastic Search启动脚本

shell脚本编写笔记

本是最近在学习Elastic Search,但是每次启动一个集群环境的时候,需要执行繁琐的命令,于是补了下shell脚本,编写个简单的shell脚本用于一键启动我的集群环境,方便自己的学习。以下是在学习过程中的一些个人笔记。
最后一个章节是我实际编写可运行的脚本用于启动我的集群环境和kibana,仅供参考。

语法

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,脚本开头必须是 #! /bin/sh 或者**#! /bin/bash**

变量定义

普通变量

直接变量名等于即可。如num=10,这就定义一个变量明为num,并赋值为10

交互变量

用于接收用户输入的变量read num,这就定义了一个num变量用于接收用户输入的值

预设变量

类似于常用的tomcat启动指令./catalina start,这里的catalina实际就是一个sh脚本,start就是预设参数,在脚本文件中直接用$0$1$2来使用,这里$0表示的是catalina脚本本身的名字,$1$2则是跟在执行脚本后的参数

只读变量

num=10
readonly num

变量使用

变量的使用,只需要在变量的前面加上关键字**$**。变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。比方说在拼接字符串的时候,如下:

read num
echo "input num is ${num}."

循环

if-else

# if-lese
if [ -e $dataPath ]
then 
    echo "${dataPath}存在"
else
    echo "${dataPath}不存在"
fi

if-else-if

# if-lese
if [ -e $dataPath ]
then 
    echo "${dataPath}存在"
elif [ -w $dataPath ]
    echo "${dataPath}可以写"
fi

while

num=10
while(($num > 1)) 
do
   echo $num
   let "num--"
done

for循环

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

运算符

算数运算符

运算符 说明 备注
+ 加法
- 减法
* 惩罚
/ 除法
% 取余
= 赋值
== 相等
!= 不相等

关系运算符

运算符 说明 备注
-eq ==
-ne !=
-gt >
-lt <
-ge >=
-le <=

逻辑运算符

运算符 说明 备注
!
-o or
-a and
&& and
|| or

字符串运算符

运算符 说明 示例 (PS:注意中括号表达式内的空格)
-z 判断字符串长度是否为0,为0返回true [ -z $a ]
-n 检测字符串长度是否为0,为0返回 false。 [ -n $a ]
$ 检测字符串是否为空,不为空返回 true。 [ $a ]

文件运算符

运算符 说明 示例 (PS:注意中括号表达式内的空格)
-b 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回true
-c 检测文件是否是字符设备文件,如果是,则返回 true。 略,用法同上
-d 检测文件是否是目录,如果是,则返回 true。 略,用法同上
-f 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 略,用法同上
-g 检测文件是否设置了 SGID 位,如果是,则返回 true。 略,用法同上
-k 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 略,用法同上
-p 检测文件是否是有名管道,如果是,则返回 true。 略,用法同上
-u 检测文件是否设置了 SUID 位,如果是,则返回 true。 略,用法同上
-r 检测文件是否可读,如果是,则返回 true。 略,用法同上
-w 检测文件是否可写,如果是,则返回 true。 略,用法同上
-x 检测文件是否可执行,如果是,则返回 true。 略,用法同上
-s 检测文件是否为空(文件大小是否大于0),不为空返回 true。 略,用法同上
-e 检测文件(包括目录)是否存在,如果是,则返回 true。 略,用法同上
-S 判断某文件是否 socket。 略,用法同上
-L 检测文件是否存在并且是一个符号链接。 略,用法同上

实际脚本例子

#! /bin/bash
echo "请选择启动的集群数量:"
# readz关键字声明一个变量用于接收用户输入的参数
read num
# 进入到elastic search的工作目录
cd /apps/elasticsearch-7.6.0/bin
# 输出当前工作路径
pwd
#定义变量curr_node
curr_node=0

# while循环,循环启动集群
while(($curr_node < $num))
# while循环体开始关键字
do

# 定义三个变量
nodeName=node$[$curr_node+1]
dataPath=/apps/cluster_elasticsearch/$nodeName/data
logsPath=/apps/cluster_elasticsearch/$nodeName/logs

# 判断数据目录是否存在,不存在即创建
if [ ! -e $dataPath ]
then 
    echo "${dataPath}不存在"
    mkdir -p $dataPath
    echo "${dataPath}创建成功"
fi


if [ ! -e $logsPath ]
then  
    echo "${logsPath}不存在"
    mkdir -p $logsPath
    echo "${logsPath}创建成功"
fi

# 动态拼接启动脚本命令,依次执行启动命令
./elasticsearch  -d -E node.name=node-$[$curr_node+1] -E http.port=$[9200+$curr_node] -E transport.port=$[9300+$curr_node] -E path.data=${dataPath} -E path.logs=${logsPath}

# 输出信息
echo "node-"$[$curr_node+1]"启动中..."

# 让变量自身+1
let "curr_node++"

# while循环体结束关键字
done
echo "Elastic Search ${num}个节点启动中"

echo "是否需要启动kibana:[请输入y/n]"
read kibana_flag
if [ $kibana_flag == "y" ]
then
   cd /apps/kibana-7.6.0-linux-x86_64
   pwd
   nohup ./bin/kibana > logs/kibana.out &
   echo "kibana启动中"
fi

发布了69 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Min_Monk/article/details/104575468