shigen
日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
最近遇到了项目的基础服务老是挂掉了,决定用shell脚本去治理一下。于是,我也看到了我在去年学习的shell脚本的笔记和实战的案例,很多都是shigen
自己写的,在这里分享给大家,希望能带大家巩固基础,提供对于效率脚本的参考。
🧑💻🧑💻注意:
- 以上的脚本适用于:centos7系列、macos系列
- 统一约定shell的脚本解释器为
bash
从基础开始
如何在控制台输出一句话,让脚本暂停
bash
echo '开始.....'
sleep 10
echo '结束.....'
输出服务器时间
输出的时间已经格式化成:
yyMMdd-HHMMSS
perl
#!/bin/bash
echo "current time; `date +%y%m%d-%H%M%S`"
生成1-10的序列
bash
# !/bin/bash
time
for i in {1..10}
do
str1=`seq -s ":" 10`
echo "${str1}"
done
shell函数
javascript
# !/bin/bash
shigen(){
echo "nice to mett you"
}
shigen
特殊参数变量
bash
#!/bin/bash
# $0 获得脚本文件名以及脚本路径
# $n 获得脚本的第n个参数
# $# 获得参数总个数
# $* 脚本的所有参数
# $@ 所有参数独立成字符串
echo "shell name: $0"
for var in "$@"
do
echo "$var"
done
echo "shell args: $* shell args len: $#"
特殊状态变量
bash
# !/bin/bash
echo "current id: $$"
echo "last id: $!"
# 参数个数不为2,返回119
[ $# -ne 2 ] && {
echo "must have two args"
exit 119
}
echo "no problem"
1-100的和
bash
#!/bin/bash
sum=0
i=1
until [ $i -gt 100 ]; do
sum=$(($sum + $i))
let i++
done
echo "sum: $sum"
实战
jenkis自动化部署java服务脚本
bash
#!/bin/bash
# jenkins shell script to deploy the java project
echo '------start deployment--------'
echo "java -version && mvn -version"
mvn clean install -DskipTests
DATE="$(date +%y%m%d-%H%M%S)"
APP_NAME="wx-develop"
APP_PORT="8088"
HARBOR_DOMIAN="xx.xx.xx.xx"
TAG="$APP_NAME:$DATE"
docker build -t $TAG -f Dockerfile .
docker login $HARBOR_DOMIAN
NEW_TAG="$HARBOR_DOMIAN/test/$TAG"
docker tag $TAG $NEW_TAG
docker push $NEW_TAG
echo "$TAG uploaded successfully"
docker run -d --name $APP_NAME-$DATE -p $APP_PORT:$APP_PORT $NEW_TAG
echo "Successfully started"
一键安装jdk8
bash
#!/bin/bash
jdk_install() {
# 1. 下载对应的压缩包
yum install -y wget
wget -nc https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz
echo "jdk package installed"
# 2. 创建安装目录
mkdir /usr/local/java/
# 解压到新建目录
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/java/
# 3. 配置写入文件
cat >> /etc/profile << "EOF"
========jdk env config=========
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
EOF
# 4. 使环境变量生效
source /etc/profile
java -version && javac -version
if [ $? -ne 0 ]; then
echo "jdk installed failed"
exit 1
else
jdk_home=$(whereis java)
echo "jdk installed successfully, now enjoy, jdk_home: $jdk_home"
fi
}
jdk_install
一键化系统监控
bash
#!/bin/bash
LOG_BASE_PATH=/var/log/server-status
CURRENT_DATE=$(date "+%Y-%m-%d")
get_server_status() {
CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
IP_ADDR=$(ifconfig eth0 | awk -F ' ' 'NR==2{print $2}')
DISK_INFO=$(df -h | grep '^/dev/' | awk '{print $3, $5}')
MEM_INFO=$(free -h | awk 'NR==2{print $NF}')
DOCKER_SERVER=$(docker ps | awk 'NR!=1,NF==NF{print $NF}' | wc -l)
if [ $DOCKER_SERVER -ne 2 ]; then
CONCLUSION="docker自定义服务未启动"
else
CONCLUSION="docker自定义服务运行正常"
fi
# 创建日志文件
if [ ! -d $LOG_BASE_PATH ]; then
mkdir -p $LOG_BASE_PATH
fi
[ ! -f $LOG_BASE_PATH ] && touch $LOG_BASE_PATH || echo $LOG_BASE_PATH
echo "统计时间: $CURRENT_TIME" >>$LOG_BASE_PATH
echo "机器ip: $IP_ADDR" >>$LOG_BASE_PATH
echo "磁盘情况: $DISK_INFO" >>$LOG_BASE_PATH
echo "内存情况: $MEM_INFO" >>$LOG_BASE_PATH
echo "docker服务: $CONCLUSION" >>$LOG_BASE_PATH
}
mail() {
get_server_status
cat $LOG_BASE_PATH
}
mail
希望以上shigen
积累和用到的脚本能给大家带来帮助,当然只是一部分,还有其他的很多效率脚本来不及整理和分享。正如我的一个运维伙伴所说:具体的脚本还得看业务情况。
欢迎伙伴们也分享自己的脚本,或者需要的脚本。
以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注
支持一下哈,您的鼓励和支持将是shigen
坚持日更的动力。同时,shigen
在多个平台都有文章的同步,也可以同步的浏览和订阅:
平台 | 账号 | 链接 |
---|---|---|
CSDN | shigen01 | shigen的CSDN主页 |
知乎 | gen-2019 | shigen的知乎主页 |
掘金 | shigen01 | shigen的掘金主页 |
腾讯云开发者社区 | shigen | shigen的腾讯云开发者社区主页 |
微信公众平台 | shigen | 公众号名:shigen |
与shigen
一起,每天不一样!