Ejemplos comunes de Shell (actualizados continuamente)

1. Determine si existe una determinada cadena en el archivo y agréguela si no existe

#!/usr/bin/env bash


strs=( "username soft nproc 65535" "username hard nproc 65535" )
file="/etc/security/limits.conf"
# 当数组中有空格时,数组引用需要用双引号包住
for str in "${strs[@]}"
do
# 判断 所需的字符串 是否在文件中存在如果存在则不进行操作
  is_exist=$(cat "${file}"|grep "${str}")
  if [ "${is_exist}"x == "x" ]; then
   echo "Ready to write ${str} to ${file}"
   echo "${str}" >> ${
    
    file}
   if [ $? == 0 ]; then
     echo "Write successfully"
   else
     echo "Write failure!"
   fi
  else
   echo "The ${str} already exists in the  ${file}"
  fi
done

 

2. Determinar si estos puertos están ocupados bajo una determinada máquina

#!/usr/bin/env bash

ports=( 8030 9020 9030 9010 9060 8040 9050 8060 8000 )
for num in ${
    
    ports[@]}
do
  netstat -tunlp |grep $num
done

 

t: muestra el estado de conexión del protocolo de transmisión TCP
u: muestra el estado de conexión del protocolo de transmisión UDP.
n: muestra la ip y el puerto como la dirección del programa, no el nombre de dominio.
l: muestra el socket que está escuchando
p: muestra el pid y el nombre del programa

Encuentre el programa (TCP, protocolo de transporte UDP) que se está escuchando en este momento y muestre la dirección, el pid y el nombre del programa (en el formato de ip+port)

 

3. Determine si existe una clase en el directorio lib (incluido jar)

#!/usr/bin/env bash


ls /${
    
    hive_home}/lib | while read one_line
do
 class_name=$(jar -vtf $one_line |grep CustomInDBAuthenticationProviderImpl)
 if [[  ${
    
    class_name}x != "x"  ]]; then
   echo "jar:$one_line  contains the ${class_name}"
 fi
done

v: salida detallada, es decir, el nombre completo de la clase
t: muestra el contenido del jar, como qué clases se incluyen, qué archivos, etc.
f: necesita especificar el nombre de archivo del paquete jar

 

4. Cuando la ejecución exitosa del comando anterior afecta la ejecución del comando posterior

Determine si el comando anterior se ejecutó con éxito, de lo contrario, la siguiente lógica definitivamente no se ejecutará con éxito.

。。。
exit_code=$?
if [ $exit_code -ne 0 ];then
  exit $exit_code
fi
if  [  "${20}"  ]; then
    echo "starting to load data to mysql using mysql load"
    bash  $F_HOME/bin/load_function.sh  "${20}"
fi

 

5. Obtenga el valor del archivo yaml

#!/usr/bin/env bash

declare -A config_map

while read line
do
  #行为空时跳过这行
  if  [  ! "${line}"  ]; then
    continue
  fi
  conf_name=$(echo ${
    
    line} | cut -d : -f 1 | sed 's/ //g' )
  conf_value=$(echo ${
    
    line} | cut -d : -f 2 |  sed 's/ //g' )
  # 如果值为空则设置默认值:bigdata
  config_map[${
    
    conf_name}]=${
    
    conf_value:-bigdata}
  echo "get config_map [ ${conf_name} : ${config_map[${conf_name}]} ]"
done < bigdata_conf.yaml

archivo bigdata_conf.yaml

zookeeper:
  zookeeper1: node1
  zookeeper2: node2
  zookeeper3: node3

hdfs:
  namenode1: node1
  namenode2: node2
  journalnode1: node1
  journalnode2: node2
  journalnode3: node3
# gao
yarn:
  resourcemanager1: node1
  resourcemanager2: node2
  jobhistorynode: node3

producción

。。。
get config_map [ zookeeper : bigdata ]
get config_map [ zookeeper1 : node1 ]
get config_map [ zookeeper2 : node2 ]
get config_map [ zookeeper3 : node3 ]
。。。

 

6. script de reintento de shell

#!/bin/sh
#记录重试次数
count=0     
# 重试标识,flag=0 表示任务正常,flag=1 表示需要进行重试
flag=0      
while [ 0 -eq 0 ]
do
    echo ".................. job begin  ..................."
    # ...... 添加要执行的内容,flag 的值在这个逻辑中更改为1,或者不变......
    
    sleep 10
    port_cnt=`netstat -anp | grep 9083 | grep LISTEN | wc -l`
    thread_cnt=`ps -ef | grep -v "grep " | grep "org.apache.hadoop.hive.metastore.HiveMetaStore" -c`
    if [[ $port_cnt -lt 1 || $thread_cnt -lt 1 ]];then
        flag=1
    else
        flag=0
    fi
    
    # 检查和重试过程   
    if [ flag -eq 0 ]; then     #执行成功,不重试
        echo "--------------- job complete ---------------"
        break;
    else                        #执行失败,重试
        count=$[${
    
    count}+1]
        if [ ${
    
    count} -eq 3 ]; then     #指定重试次数,重试超过4次即失败
            echo 'timeout,exit.'
            break
        fi
        echo "...............retry in 1 seconds .........."
        sleep 1
    fi
done

Supongo que te gusta

Origin blog.csdn.net/hiliang521/article/details/131445761
Recomendado
Clasificación