一.常用知识总结

1.特殊变量($0,@,#,*,?)

$0:当前脚本的文件名。
$n:n是一个数字,表示第几个参数。
$#:传递给脚本或函数的参数个数。
$*:传递给脚本或函数的所有参数。当被双引号""包含时,会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
$@:传递给脚本或函数的所有参数。当被双引号""包含时,仍然将每个参数都看作一份数据,彼此之间是独立的。。
$?:上个命令的退出状态,或函数的返回值。
$$:当前Shell的进程ID。对于Shell脚本,就是这些脚本所在的进程ID。

2.将date转为指定格式:date +%F

3.常用的字符(,'',"",``)

反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
单引号(’’):转义其中所有的变量为单纯的字符串。
双引号(""):保留其中的变量属性,不进行转义处理。
反引号(``):把其中的命令执行后返回结果。

4.流程控制语句(if,for,case,while)

# if判断
if [[ condition ]]; then
do some thing;
elif [[ condition ]]; then
do some thing;
else
do some thing;
fi;
#判断 if 条件的`[ "3" = "3" ]`是否正确,
#在黑窗口可以使用 `&&`命令看控制台:[ "3" = 3 ] && echo ok # for循环
for i in $(seq 10); do
do some thing;
done; # while循环
i=10;
while [[ $i -gt 5 ]];do
echo $i;
((i--));
done; # case匹配
case $1 in
start | begin)
echo "start something"
;;
stop | end)
echo "stop something"
;;
*)
echo "Ignorant"
;;
esac

5.文件、文件夹是否存在

#判断文件夹是否存在
if [ -d "/data/" ]
#判断文件是否存在
if [ -f "/data/filename" ]

6.经验之谈

①在过滤的时候会用到grep, 但是如果不忽略自身脚本继而执行某些(删除)命令,会把当前脚本杀掉
ps -ef | grep mysqld | grep -v grep | awk '{print $2}'  | xargs kill -9
②不想在终端看到命令的输出可以把输出重定向到/dev/null
命令行 > /dev/null 2>&1 &
③前台、后台任务
& 标识将命令放入后台执行,不占用终端显示。
jobs 能看到所有前、后台命令。
ctrl + z 可以把任务转移到后台,并且暂停执行。
fg 将后台的命令调至前台。
bg 将一个后台的命令变成继续执行。
④输入、输出的重定向
标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。 符号 作用 命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2 符号 作用 命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件

二.脚本总结

1.jar启停脚本

#!/bin/bash
# 群起nginx和日志服务器 停止
log_home=/opt/module/gmall-logServer/
case $1 in
"start")
# 启动nginx
echo "在hadoop102启动nginx"
sudo /usr/local/webserver/nginx/sbin/nginx
for host in hadoop102 hadoop103 hadoop104 ; do
echo "在$host 启动日志服务器"
ssh $host "source /etc/profile; nohup java -jar $log_home/gmall-log-0.0.1-SNAPSHOT.jar >${log_home}/logs/server.log 2>&1 &"
done ;;
"stop")
echo "在hadoop102停止nginx"
sudo /usr/local/webserver/nginx/sbin/nginx -s stop
for host in hadoop102 hadoop103 hadoop104 ; do
echo "在$host 停止日志服务器"
ssh $host "source /etc/profile; jps | awk ' /gmall-log-0.0.1-SNAPSHOT.jar/ {print \$1}' | xargs kill -9"
done
;;
*)
echo "你启动的姿势不对"
echo " log.sh start 启动nginx和日志服务器"
echo " log.sh stop 停止nginx和日志服务器"
esac

2.分发脚本

xsync

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done

3.常用技能

1.脚本中kill进程

java进程可以用jps过滤kill

jps | awk ' /gmall-log-0.0.1-SNAPSHOT.jar/ {print \$1}' | xargs kill -9

其他进程可以用ps过滤kill

ps -ef | grep bigdata-kafkasource-hdfs | grep -v grep |awk '{print \$2}'|xargs -n1 kill -9

注意ps -ef | grep “过滤关键词” 不要和 脚本.sh的名称一样,不然会把脚本也杀掉,脚本的命令也就无法执行了

2.后台启动jar
nohup java -jar $log_home/gmall-log-0.0.1-SNAPSHOT.jar >${log_home}/logs/server.log 2>&1  &"
3.启动脚本前最好执行下“source /etc/profile”

Shell【常用知识总结】的更多相关文章

  1. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  2. Linux Shell 基础知识(一)

    1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 ​ GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...

  3. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  4. 【shell 大系】Linux Shell常用技巧

    在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...

  5. Linux系统重要快捷键& Shell 常用通配符

    [Tab]:使用Tab键来进行命令补全: [Ctrl+c]:强行终止当前程序: [Ctrl+d]:键盘输入结束或退出终端: [Ctrl+s]:暂定当前程序,暂停后按下任意键恢复运行: [Ctrl+z] ...

  6. shell 常用正则

    shell常用正则表达式   “^\d+$” //非负整数(正整数 + 0)   “^[0-9]*[1-9][0-9]*$” //正整数   “^((-\d+)|(0+))$” //非正整数(负整数 ...

  7. Hbase Shell常用命令

    hbase shell常用的操作命令有create,describe,disable,drop,list,scan,put,get,delete,deleteall,count,status等,通过h ...

  8. (转)Hbase shell 常用命令(1)

    Hbase shell 常用命令(1) link:http://blog.csdn.net/scutshuxue/article/details/6988348 下面我们看看HBase Shell的一 ...

  9. hbase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

随机推荐

  1. Win powershell执行策略配置

    参考连接:https://blog.csdn.net/jeffxu_lib/article/details/84710386 参考连接:http://www.cragsman.org/index.ph ...

  2. 盘点 GitHub 年度盛会|附视频

    「Universe 2021」是 GitHub 于今年举办的开发者盛会,本次 Universe 2021 大会采用线上直播模式,为期两天已于上周落下帷幕. 这是 GitHub 举办的一年一度开发者盛会 ...

  3. 区块链开发学习第三章:私有链上部署helloBlockchain简单合约

    前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的! 一.Solidity编译器 开始的时候用的http ...

  4. Java多线程| 01 | 线程概述

    Java多线程| 01 | 线程概述 线程相关概念 进程与线程 进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位.可以把进程简单的理解 ...

  5. Java学习(九)

    今天先学习了内联框架的知识,使用iframe的标签,还有超链接的知识. 做了个小实践 <!DOCTYPE html> <head> <meta charset=" ...

  6. 使用bs4中的方法爬取星巴克数据

    import urllib.request # 请求url url = 'https://www.starbucks.com.cn/menu/' # 模拟浏览器发出请求 response = urll ...

  7. R数据分析:二分类因变量的混合效应,多水平logistics模型介绍

    今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...

  8. Java 如何对文件进行多个Object对象流的读写操作

    思路:把已经序列化的对象存入容器(如LinkedList<?>)中,然后用ObjectInputStream和ObjectOutputStream对这个实例化的LinkedList< ...

  9. UNCTF2020 web writeup

    1.Easy_ssrf 给了file_get_contents,直接读取flag即可 2.Easyunserialize 利用点在 构造uname反序列化逃逸即可 3.Babyeval 两个过滤,绕过 ...

  10. 发布项目到maven中央仓库

    https://www.xiaominfo.com/2017/04/25/swagger-bootstrap-ui-issue-maven-central/?tdsourcetag=s_pcqq_ai ...