シェルの一般的な例 (継続的に更新)

1. ファイル内に特定の文字列が存在するかどうかを確認し、存在しない場合は追加します。

#!/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. これらのポートが特定のマシンで占有されているかどうかを確認します。

#!/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:TCP伝送プロトコルの接続状態を表示
u:UDP伝送プロトコルの接続状態を表示します。
n: IP とポートをドメイン名ではなくプログラム アドレスとして表示します。
l: リッスンしているソケットを表示します。
p: pid とプログラム名を表示します。

現在リッスンしている (TCP、UDP トランスポート プロトコル) プログラムを検索し、アドレス、pid、プログラム名 (ip+port の形式) を表示します。

 

3. lib ディレクトリ (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: 詳細な出力、つまりクラスの完全修飾名
t: どのクラスが含まれているか、どのファイルなど、jar の内容を表示します。
f: jar パッケージのファイル名を指定する必要があります。

 

4. 前のコマンドの実行成功が後続のコマンドの実行に影響を及ぼす場合

前のコマンドが正常に実行されたかどうかを確認します。正常に実行されなかった場合、次のロジックは確実に正常に実行されません。

。。。
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. 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

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

出力

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

 

6. シェル再試行スクリプト

#!/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

おすすめ

転載: blog.csdn.net/hiliang521/article/details/131445761