shell脚本随记(一)

一、一个文件夹有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 {}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值