IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shell脚本学习 -> 正文阅读

[系统运维]shell脚本学习

一些基本知识

关于2>&1
注意:shell脚本是以 " .sh " 位后缀的文本文件,它可以被赋予可执行的权限,不要把某些的Linux的命令符号与shell脚本的命令符号搞混!(这个还是很少的,大部分应该都差不多)
Linux 和 shell脚本命令
Linux命令大全

shell脚本命令:
echo 相当于 print echo string --> string

echo it is 
echo "it is"
echo " \"it is \" "

结果:
it is
it is
“it is”

-d filepath :如果 filepath目录存在,则为真
各种 " -x filename " 代表的含义

mkdir - p file_path : -p 表示递归,创建目录
eg : mkdir -p /tmp/dir/sss

ps -ef :用于查看全格式的全部进程

grep 命令用于查找文件里符合条件的字符串 grep -?命令大全

命令描述
grep -v 或 --invert-match显示不包含匹配文本的所有行
grep -i 或 --ignore-case忽略字符大小写的差别

案例:通过grep来查找某一进程的进程号
假设我们要找进程为 sbin/auditdsbin/audispd进程号
在这里插入图片描述
在这里插入图片描述
对应的命令为(绿框):
在这里插入图片描述

解释:ps -ef 查询出来的进程 作为grep的输入,通过 “ | ” 连接;
见绿框:grep -i (查询包括sbin的进程)–> 发现多了一个“grep --color=auto -i sbin/aud” 进程 -->grep -v grep (把该进程过滤掉)–>得到包含 sbin/aud 的进程;

查看awk的作用

在这里插入图片描述
通过awk对文本每一行按照空格切割,获得其第二个参数即为进程号;
在这里插入图片描述

-z :判断当前字符串长度是否为零

$? 简单介绍

命令描述
$#添加到shell的参数个数
$0shell本身的文件名
$1~$n添加到Shell的各参数值。$1是第1参数、$2是第2参数…

shell中一些特殊符号的介绍 注意:不要与Linux命令行的符号搞混了

符号shell下的运算符描述Linux 命令行 描述
x++后增
x–后减
!逻辑求反
~位求反
**幂运算幂运算
<<左位移
>>右位移>>文件追加;>文件覆盖
&位布尔和放在启动参数后面表示设置此进程为后台进程
|位布尔或管道符号;C1|C2 将c1的输出作为c2的输入
&&逻辑和逻辑和
||逻辑或逻辑或

tips:当是两个运算符(&&,||)时,当第一个条件成立(||)或违反(&&),就不再继续判断之后的条件,所以效率高一点;当是一个运算符(&,|)时,无论第一个条件是否成立(|)或违法(&),都会继续执行剩下的判断语句,所以效率低一点。

eval [参数]

  • eval 起一个解析参数的作用;即:对后面的语句不断解析参数,解析到最后,再开始执行解析出来的参数;
  • 如果后面语句里面含有参数 那么就用eval命令;后面跟的语句可以执行对应的命令,函数获取通过 " " 来得到;

案例分析:双引号里面的参数可以不断解析;单引号不可以;
案例1:

# myfile.txt 存放的数据为:nice
b="cat"
c="$b /opt"
a="$c/myfile.txt"     # result:
$a                    # nice
"$a"                  # 出错!
echo '$a;$a;$a'       # 单引号 不解析  \$a;\$a;$a   
eval '$a;$a;$a'       # eval 只要是参数就解析 nice nice nice
echo "$a;$a;$a"       # 双引号,解析 然后echo  cat /opt/myfile.txt;cat /opt/myfile.txt;cat /opt/myfile.txt
     

案例2:

#!/bin/bash
b='cat'
c="$b /opt"
a='$c /myfile.txt'

echo $a
eval echo $a

解释:
echo $a --> $a
eval echo $a

  • 解析参数 :$a= ‘$c /myfile.txt’ = ’ $b /opt /myfile.txt’ = ‘cat /opt/myfile.txt’
  • 解析完毕,变成了 eval echo cat /opt/myfile.txt
  • 执行 echo cat /opt/myfile.txt
  • 结果 :cat /opt/myfile.txt

结果如下:

nice to meet you

if 语句

if [......]
then ...
else ...
fi

case 语句:

case $变量名 in
模式1)
	command1
	command2
	command3
;;
模式2)
	command1
	command2
	command3
;;
*)
	command1
	command2
	command3
;;
esac

脚本案例:

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi#检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
function check_process()
{
 pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print 
$2}')
 ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -
d '/' -f 1)
 echo $pid
 [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start()
{
 metapid=$(check_process HiveMetastore 9083)
 cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 
&"
 [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
 server2pid=$(check_process HiveServer2 10000)
 cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
 [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动" }
function hive_stop()
{
metapid=$(check_process HiveMetastore 9083)
 [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
 server2pid=$(check_process HiveServer2 10000)
 [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动" }
case $1 in
"start")
 hive_start
 ;;
"stop")
 hive_stop
 ;;
"restart")
 hive_stop
 sleep 2
 hive_start
 ;;
"status")
 check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行
正常" || echo "Metastore 服务运行异常"
 check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运
行正常" || echo "HiveServer2 服务运行异常"
 ;;
*)
 echo Invalid Args!
 echo 'Usage: '$(basename $0)' start|stop|restart|status'
 ;;
esac

案例相关用法借鉴:

A && B || C

说明:替换 if 语句;效率高点
A == True 执行 B 不执行 C
B == False 执行 C 不执行 B

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:55:01  更:2021-12-24 18:55:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:02:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码