一些基本知识
关于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/auditd 和 sbin/audispd 的进程号 对应的命令为(绿框):
解释:ps -ef 查询出来的进程 作为grep的输入,通过 “ | ” 连接; 见绿框:grep -i (查询包括sbin的进程)–> 发现多了一个“grep --color=auto -i sbin/aud” 进程 -->grep -v grep (把该进程过滤掉)–>得到包含 sbin/aud 的进程;
查看awk的作用
通过awk对文本每一行按照空格切割,获得其第二个参数即为进程号;
-z :判断当前字符串长度是否为零
$? 简单介绍
命令 | 描述 |
---|
$# | 添加到shell的参数个数 | $0 | shell本身的文件名 | $1~$n | 添加到Shell的各参数值。$1是第1参数、$2是第2参数… |
shell中一些特殊符号的介绍 注意:不要与Linux命令行的符号搞混了
符号 | shell下的运算符描述 | Linux 命令行 描述 |
---|
x++ | 后增 | | x– | 后减 | | ! | 逻辑求反 | | ~ | 位求反 | | ** | 幂运算 | 幂运算 | << | 左位移 | | >> | 右位移 | >>文件追加;>文件覆盖 | & | 位布尔和 | 放在启动参数后面表示设置此进程为后台进程 | | | 位布尔或 | 管道符号;C1|C2 将c1的输出作为c2的输入 | && | 逻辑和 | 逻辑和 | || | 逻辑或 | 逻辑或 |
tips:当是两个运算符(&&,||)时,当第一个条件成立(||)或违反(&&),就不再继续判断之后的条件,所以效率高一点;当是一个运算符(&,|)时,无论第一个条件是否成立(|)或违法(&),都会继续执行剩下的判断语句,所以效率低一点。
eval [参数]
- eval 起一个解析参数的作用;即:对后面的语句不断解析参数,解析到最后,再开始执行解析出来的参数;
- 如果后面语句里面含有参数 那么就用eval命令;后面跟的语句可以执行对应的命令,函数获取通过 " " 来得到;
案例分析:双引号里面的参数可以不断解析;单引号不可以; 案例1:
b="cat"
c="$b /opt"
a="$c/myfile.txt"
$a
"$a"
echo '$a;$a;$a'
eval '$a;$a;$a'
echo "$a;$a;$a"
案例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
脚本案例:
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi
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
|