shell 判断文件夹或文件是否存在

文件夹不存在则创建

if [ ! -d "/data/" ];then
  mkdir /data
  else
  echo "文件夹已经存在"
fi

文件存在则删除

if [ ! -f "/data/filename" ];then
  echo "文件不存在"
  else
  rm -f /data/filename
fi

判断文件夹是否存在

if [ -d "/data/" ];then
  echo "文件夹存在"
  else
  echo "文件夹不存在"
fi

判断文件是否存在

if [ -f "/data/filename" ];then
  echo "文件存在"
  else
  echo "文件不存在"
fi

文件比较符

-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新  [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧  [ "/data/file1" -ot "/data/file2" ]

k8s更新镜像的简单脚本

用途:

当镜像实际发生改变,但是tag不变的情况下进行操作

updateimage.sh

#!/bin/env bash
kubectl set image -n demo deployments.apps/demo-deployment  demo=demo.host.com/demo/demo:latest
if [ $? -ne 0 ]; then
        echo "set image faild"
        exit 1
else
        echo "set image successed"
        kubectl rollout restart -n demo deployments.apps/demo-deployment
fi

一组基础的k8s模板

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: template-nginx
    release: template-nginx
  name: template-deployment
  namespace: template
spec:
  replicas: 1
  selector:
    matchLabels:
      app: template-nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      name: template-nginx
      namespace: template
      labels:
        app: template-nginx
        release: template-nginx
        releaseRevision: "v1"
    spec:
      containers:
        - name: template-nginx
          image: nginx:1.20-alpine
          imagePullPolicy: IfNotPresent
          ports:
          - name: template
            containerPort: 80
          volumeMounts:
          - name: template
            mountPath: /etc/nginx/conf.d/
      volumes:
          - name: template
            configMap:
              name: template

service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: template-nginx
    release: template-nginx
  name: template-nginx
  namespace: template
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: template-nginx
  type: ClusterIP

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: template-nginx
  namespace: template
  labels:
    ingress: template-nginx
    release: template-nginx
spec:
    rules:
      - host: temp.host.com
        http:
          paths:
            - path: /admin/
              backend: 
                service:
                  name: template-nginx
                  port:
                    number: 80
              pathType: Prefix
            - path: /
              backend:
                service:
                  name: template-nginx
                  port:
                    number: 80
              pathType: ImplementationSpecific

namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  labels:
    kubernetes.io/metadata.name: template
  name: template
spec:
  finalizers:
  - kubernetes

configmap.yaml

apiVersion: v1
data:
  default.conf: |+
    server {
        listen       80;
        listen  [::]:80;
        server_name  temp.host.com;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

kind: ConfigMap
metadata:
  name: template
  namespace: template

一个简单的shell判断

echo "hello world" > /tmp/helloworld.txt
if [ $? -ne 0 ]; then
echo " failed"
exit 1
else
echo "successed"
fi

作用:

判断上一句执行的结果,如果为0,返回“successed”,如果不为0,返回“failed”

一个简单的shell循环

#!/bin/env bash
CODEPATH=/opt/code/
JARPATH=/opt/jar
set -xe
find  ${CODEPATH} -type f -name "*.jar" | tee jar.cache.txt
for line in $(cat jar.cache.txt)
do
        cp ${line} ${JARPATH}
done
rm jar.cache.txt


作用:

循环查找/opt/code下的jar包,推送到/opt/jar目录下

for line一句,逐行读取jar.cache.txt,并执行