linux shell 可用代码片段
镜像下载
1
2
3
4
5
6
7
8
9
10
11
12
#! /bin/bash
mirror=$2
if [ -z $2 ];then
stty erase '^H'
read -p "输入加速镜像地址: " mirror
fi
echo "开始下载镜像: $1"
IMAGE_NAME=$1
IFS="/" read -ra image_arr <<< "${IMAGE_NAME}"
echo "加速镜像为: ${mirror}/${image_arr[1]}/${image_arr[2]}"
docker pull "${mirror}/${image_arr[1]}/${image_arr[2]}"
docker tag "${mirror}/${image_arr[1]}/${image_arr[2]}" ${IMAGE_NAME}
设置脚本的运行策略
1
2
3
4
set +e # 关闭错误检查
set +u # 关闭未定义变量检查
set -o pipefail # 管道中的任何命令失败都将导致管道的返回值为非零值
set -euo pipefail # x:打印脚本 e:非零退出 u:除了$*和$@, 未定义变量引用既是错误 pipefail:命令失败的返回码作为管道返回码(默认是最后一条 shell)
shell 引入文件
1
2
3
4
5
6
7
# 脚本库目录 /path/to/library/
# common_functions.sh
# useful_tools.sh
# 主脚本 main.sh
source /path/to/library/common_functions.sh
source /path/to/library/useful_tools.sh
提示框确认
1
2
3
4
5
6
7
8
echo "是否确认上述操作已完成? y/n"
read reply
case $reply in
y* | Y*)
echo "start init!";;
n* | N*)
exit 0;;
esac
帮助文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
### ======常用参数======
### -d 启动单机版 kafka
### -n 当前节点 ID
### -c 节点总数量
### -s 当前服务器 IP
### -a 激活的配置 test (公司内网), prod (生产内网)
###
### ======不常用参数======
### -k 仅启动 kafka (比如已经初始化 3 台 zk 和 kafka, 第四台服务器不需要 zk, 那么该参数可以仅启动 kafka)
### -i hub 地址, 配置该参数, hub 地址将不会受到激活的配置影响
### -e docker-compose 启动参数
###
### 单机版本: ./init.sh -d -s 服务器IP -a test
### 集群版本: ./init.sh -n 1 -c 3 -s 服务器IP -a test
###
### zookeeper 端口为: 2181 kfaka 端口为: 9092
help() {
awk -F'### ' '/^###/ { print $2 }' "$0"
}
set -x
if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then
help
exit 1
fi
ip和域名校验
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# 输入字符串
string="www.xxx.comx1.xa"
# IP地址的正则表达式
ip_regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
# 域名的正则表达式
domain_regex="^([a-zA-Z0-9]+\.){1,}[a-zA-Z]{2,}$"
# 判断是否为IP地址
if echo "$string" | grep -E -q "$ip_regex"; then
echo "输入字符串是一个IP地址"
elif echo "$string" | grep -E -q "$domain_regex"; then
echo "输入字符串是一个域名"
else
echo "输入字符串既不是IP地址也不是域名"
fi
日志打印
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE="\033[34m"
PURPLE="\033[35m"
BOLD="\033[1m"
NC='\033[0m'
info(){
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "$GREEN$(date '+%Y/%m/%d %H:%M:%S') - [INFO] - $* $NC"
else
echo -e "$GREEN$(date '+%Y/%m/%d %H:%M:%S') - [INFO] - $* $NC"
fi
}
error(){
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "$RED$(date '+%Y/%m/%d %H:%M:%S') - [ERROR] - $* $NC"
else
echo -e "$RED$(date '+%Y/%m/%d %H:%M:%S') - [ERROR] - $* $NC"
fi
}
warn(){
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "$YELLOW$(date '+%Y/%m/%d %H:%M:%S') - [WARN] - $* $NC"
else
echo -e "$YELLOW$(date '+%Y/%m/%d %H:%M:%S') - [WARN] - $* $NC"
fi
}