一、一个文件夹有8w张图片,脚本使每500张图片放在一个文件夹里面
mkPic.sh
#!/bin/bash
for((i=1;i<=40000;i++));
do
touch $(cat /dev/urandom | head -n 10 | md5sum | head -c 5).jpg
touch $(cat /dev/urandom | head -n 10 | md5sum | head -c 5).png
done
movePic.sh
#!/bin/bash
picTotalNum=`ls *.png *.jpg | wc -l`
fileTotalNum=`echo "$picTotalNum/500" | bc`
for((i=1;i<=$fileTotalNum;i++));
do
count=1
mkdir -p file$i
for j in `ls *.png *.jpg | head -n 500`
do
mv $j file$i
count=$((${count} + 1))
if [ $count -gt 500 ]
then
break
fi
done
done
2、在文本每行前面加上 ### 1 (数字是递增的)
# awk方法
awk '{print "###",NR,$0}' 3.txt
# sed方法 但这个方法是非常耗时的,当文本行数很多的时候
for i in $(seq `cat 3.txt|wc -l`);do sed -i "$i{s/^/### $i /}" 3.txt;done
# 方法3 先让cat -n 让文本有序号,之后用sed处理行首添加 ###
cat -n 1.txt > 2.txt
sed -r "s@^@### @" 2.txt
sed -r "s#[ \t]+# #g" 2.txt
二、docker删除(15天)之前的容器。
作者:群里阿拉川
function docker_container_clean(){
flag=0
tmp_container_file="clean_container_by_create_time"
# 格式化输出containers 的创建时间等信息并且将时间信息取出放到临时文件中,grep -v 保留不删除的container
docker ps --format 'table {{.CreatedAt}}\t{{.ID}}\t{{.Names}}\t{{.Image}}' |grep -vE "CREATED|devops" >/tmp/${tmp_container_file} || flag=$?
# 设置时间节点,需要删除多少天之前的;格式化时间戳格式,方便后面进行时间对比
clean_before_days=$(date -d $(date -d "-${days} days" -I) +%s)
# 如果flag 的值为1,说明没有符合删除条件的container
if [ ${flag} -eq 0 ];then
while read line
do
# 读取前面获取的时间信息
container_create_time=$(echo ${line} |awk '{print $1}')
formated_container_create_time=$(date -d "${container_create_time}" +%s)
container_id=$(echo ${line} |awk '{print $5}')
if [ "${formated_container_create_time}" -le "${clean_before_days}" ];then
echo "${container_create_time} < ${clean_before_days}"
# 满足条件: 创建时间在指定时间节点之前,删除对应的container
docker rm -f ${container_id}
fi
done </tmp/${tmp_container_file}
rm -f /tmp/${tmp_container_file}
fi
}
三、Linux下批量启动jar包的shell脚本
#! /bin/sh
# 端口号
PORTS=(8761 10000)
# 模块
MODULES=(zns-eureka zns-product)
# 模块名称
MODULE_NAMES=(注册中心 产品模块)
# jar包数组
JARS=(zns-eureka-1.0.0.jar zns-product-1.0.0.jar)
# jar包路径
JAR_PATH='/usr/local/app/jars'
# 日志路径
LOG_PATH='/usr/local/app/logs'
start() {
local MODULE=
local MODULE_NAME=
local JAR_NAME=
local command="$1"
local commandOk=0
local count=0
local okCount=0
local port=0
for((i=0;i<${#MODULES[@]};i++))
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=${JARS[$i]}
PORT=${PORTS[$i]}
if [ "$command" == "all" ] || [ "$command" == "$MODULE" ];then
commandOk=1
count=0
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE---$MODULE_NAME:已经运行,PID=$PID"
else
exec nohup java -Xms256m -Xmx512m -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/$MODULE.log 2>&1 &
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -z "$PID" ]
do
if (($count == 30));then
echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒内未启动,请检查!"
break
fi
count=$(($count+1))
echo "$MODULE_NAME启动中.................."
sleep 10s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
okCount=$(($okCount+1))
echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
fi
fi
done
if(($commandOk == 0));then
echo "第二个参数输入错误"
else
echo "............本次共启动:$okCount个服务..........."
fi
}
stop() {
local MODULE=
local MODULE_NAME=
local JAR_NAME=
local command="$1"
local commandOk=0
local okCount=0
for((i=0;i<${#MODULES[@]};i++))
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=${JARS[$i]}
if [ "$command" = "all" ] || [ "$command" = "$MODULE" ];then
commandOk=1
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE---$MODULE_NAME:准备结束,PID=$PID"
kill -9 $PID
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -n "$PID" ]
do
sleep 3s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
echo "$MODULE---$MODULE_NAME:成功结束"
okCount=$(($okCount+1))
else
echo "$MODULE---$MODULE_NAME:未运行"
fi
fi
done
if (($commandOk == 0));then
echo "第二个参数输入错误"
else
echo "............本次共停止:$okCount个服务............"
fi
}
case "$1" in
start)
start "$2"
;;
stop)
stop "$2"
;;
restart)
stop "$2"
sleep 3s
start "$2"
;;
*)
echo "第一个参数请输入:start|stop|restart"
exit 1
;;
esac
启动所有jar包:sh jar_shell.sh start all 或者./sh start all
停止所有jar包:sh jar_shell.sh stop all 或者./sh stop all
重启所有jar包:sh jar_shell.sh restart all 或者./sh restart all
启动,停止或重启单个jar包,只需要将all替换为相应的模块就行
比如 sh jar_shell.sh start zns-eureka
详情脚本内容参考:https://blog.csdn.net/weixin_38169722/article/details/101771446
3.2 将yaml编排好docker镜像上传至harbor,启动k8s(yaml文件内容略)
#!/bin/bash
docker_registry=192.168.31.70
kubectl create secret docker-registry registry-pull-secret --docker-server=$docker_registry --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@ctnrs.com -n ms
service_list="eureka-service gateway-service order-service product-service stock-service portal-service"
service_list=${1:-${service_list}}
work_dir=$(dirname $PWD)
current_dir=$PWD
cd $work_dir
mvn clean package -Dmaven.test.skip=true
for service in $service_list; do
cd $work_dir/$service
if ls |grep biz &>/dev/null; then
cd ${service}-biz
fi
service=${service%-*}
image_name=$docker_registry/microservice/${service}:$(date +%F-%H-%M-%S)
docker build -t ${image_name} .
docker push ${image_name}
sed -i -r "s#(image: )(.*)#\1$image_name#" ${current_dir}/${service}.yaml
kubectl apply -f ${current_dir}/${service}.yaml
done
service_list="eureka-service gateway-service order-service product-service stock-service portal-service"
#下面句的意思是算是parameter expansion。把默认服务保存到数组里,判断$1是否存在,存在就操作1$,不存在就分别操作各服务,并判断每一个服务的操作结果。
#实际操作的时候,即不加参数则执行全部service_list,如果有参数则执行参数名的服务。 类似于上面脚本的sh jar_shell.sh start all 和 sh jar_shell.sh start zns-eureka
#注:来自马龙帅和double文的解释
service_list=${1:-${service_list}}
详情脚本内容参考良哥:https://github.com/lizhenliang/simple-microservice/tree/master/k8s
四、测试下某个下载链接是否可以访问,但是不要下载。
带头大哥:
if wget --spider http://google.com 2>/dev/null; then
echo "File exists"
else
echo "File does not exist"
fi
#或者
#it's an interesting problem to handle that gracefully -- one approach is to use -r 0-0 to request only the first byte of the file. I've amended the answer appropriately.
if curl --output /dev/null --silent --fail -r 0-0 "$url"; then
echo ok;
fi
if curl --output /dev/null -A 'learning from black brother' --silent --fail -r 0-0 "https://www.baidu.com"; then echo ok;fi
五、查看docker镜像的dockerfile (脚本列出全部)
cat checkDockerFile.sh
#!/bin/bash
#imageName=($(docker images | awk '!/^REPOS/{print $1}'))
for i in $(docker images | awk '!/^REPOSITORY/{print $1","$3}')
do
echo -e "imageName,imageID: $i \n"
echo -e "$(docker history $(echo -e $i|grep -oP "(?<=,).*") --format "{{.CreatedBy}}" --no-trunc |tac | awk '{if($3~/nop/){for(i=1;i<=3;i++){$i=""};print substr($0,4)}else{print "RUN",$0}}')"
echo -e "----END----- \n"
done
参考:https://blog.csdn.net/yyuggjggg/article/details/122086429 和 https://blog.csdn.net/weixin_41659102/article/details/110784404
六、使用shell调用谷歌浏览器批量打开网站。
#环境 windows10 、 git bash
#思路:curl获取页面内容,grep筛选url,echo拼接出完整url,调用Chrome来执行这些url。 应该xargs还有更简化的写法bash -c 啥的
curl -s http://www.xxx.xyz//search.php?keyword=xxx | grep "movie.php" | grep -oP '(?<=href=").*?(?=")' | xargs -I {} echo http://www.xxx.xyz{} | xargs -I {} C:\\Users\\admin\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe {}