【shell】Shell学习后篇

Linux 常用 Shell

文章目录

  • Linux 常用 Shell
    • Banner
    • 设置字体颜色
    • 设置提示
    • 操作系统
    • 操作系统版本号
    • 系统处理器架构
    • 关闭防火墙和SELinux
    • 系统操作
    • 防火墙相关
    • 获取当前目录
    • 判断文件是否存在
    • 判断目录是否存在
    • 后台挂起静默执行
    • 判断之前的命令是否成功

Banner

设置字体颜色

RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
BOLD='\033[1m'
PLAIN='\033[0m'

设置提示

SUCCESS='[\033[32mOK\033[0m]'
COMPLETE='[\033[32mDONE\033[0m]'
WARN='[\033[33mWARN\033[0m]'
ERROR='[\033[31mERROR\033[0m]'

操作系统

SYSTEM_NAME=$(cat /etc/os-release | grep -E "^ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")
if [ -s /etc/redhat-release ];then
	SYSTEM_VERSION=RedHat
elif [ -s /etc/debian_version ];then
	SYSTEM_VERSION=Debian
elif [ -s /etc/centos-release ];then
	SYSTEM_VERSION=CentOS
fi

操作系统版本号

SYSTEM_VERSION_NUMBER=$(cat $LinuxRelease | grep -E "VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")

系统处理器架构

ARCH=$(uname -m)
# 判定系统处理器架构
case ${ARCH} in
    x86_64)
        SYSTEM_ARCH="x86_64"
        ;;
    aarch64)
        SYSTEM_ARCH="ARM64"
        ;;
    armv7l)
        SYSTEM_ARCH="ARMv7"
        ;;
    armv6l)
        SYSTEM_ARCH="ARMv6"
        ;;
    i386 | i686)
        SYSTEM_ARCH="x86_32"
        ;;
    *)
        SYSTEM_ARCH=${ARCH}
        ;;
    esac

关闭防火墙和SELinux

function CloseFirewall() {
    if [[ $(systemctl is-active firewalld) == "active" ]]; then
        CHOICE_C=$(echo -e "\n${BOLD}└─ 是否关闭防火墙和 SELinux ? [Y/n] ${PLAIN}")
        read -p "${CHOICE_C}" INPUT
        [ -z ${INPUT} ] && INPUT=Y
        case $INPUT in
        [Yy] | [Yy][Ee][Ss])
            systemctl disable --now firewalld >/dev/null 2>&1
            [ -s /etc/selinux/config ] && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config && setenforce 0 >/dev/null 2>&1
            ;;
        [Nn] | [Nn][Oo]) ;;
        *)
            echo -e "\n$WARN 输入错误,默认不关闭!"
            ;;
        esac
    fi
}

系统操作

# 强制更新rpm包,忽略依赖
rpm -Uvh *.rpm --nodeps --force
# 创建数据库和导入初始化数据
mysql -uroot -pPassword -e "create database databasename;"
mysql -uroot -pPassword  databasename < ./init/sql/ddl.sql
# 查询程序进程号并终止进程
kill -9 $(ps -ef | grep elasticsearch | grep -v "grep" | awk '{print $2}')  >/dev/null 2>&1
tar -xzf xxxx.tar.gz -C /some_dir/

防火墙相关

#查看防火墙状态
systemctl status firewalld.service

#关闭防火墙
systemctl stop firewalld.service

#开启防火墙
systemctl start firewalld.service
#!/bin/bash
## 计算传递进来的参数个数[$#]
## 获取脚本名称[$0]
## 检查之前的命令是否运行成功[$?]
## 获取文件的末行[tail -1 filename]
## 获取文件的首行[head -1 filename]
## 获取文件每一行的第n个元素[awk '{print $n}']
## 如果文件中每行第n个元素是param,则获取第m个元素[awk '{if($n == "param") print $m}']
## 强制拷贝[cp -rf]

##查看linux系统版本

cat /etc/issue

##连接mysql数据库

mysql -u USERNAME -p PASSWORD DATABASENAME <<EOF 2>/dev/null
    show databases;
EOF

获取当前目录

baseDir=$(cd `dirname "$0"`;pwd)

判断文件是否存在

if [ ! -f $filename ]; then
    exit 1
fi

判断目录是否存在

if [ ! -d $dir ]; then
    mkdir -p $dir
fi

后台挂起静默执行

nohup $baseDir/start.sh $PARAM 2>&1 >> $LOGFILE &

判断之前的命令是否成功

if [ ! $? -eq 0 ]; then
    exit 1
fi

你可能感兴趣的:(SHELL脚本,bash)