一.常用知识总结

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. Python基础入门(1)- Python环境搭建与基础语法

    Python编程环境搭建 Python环境搭建 官网下载:https://www.python.org/ python --version PyCharm下载安装 安装 官网下载:https://ww ...

  2. VMware vSphere中三种磁盘:精简置备/厚置备置零/厚置备延迟置零

    VMware磁盘格式分类. 厚置备延迟置零.厚置备置零和精简置备1.厚置备延迟置零(zeroed thick) 以默认的厚格式创建虚拟磁盘.创建过程中为虚拟磁盘分配所需空间.创建时不会擦除物理设备上保 ...

  3. Java经典面试题-不古出品

    @ 目录 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? ...

  4. node 读取文件内容并响应

    node 读取文件内容并响应 const http = require('http'); const fs = require('fs') //创建 Server const server = htt ...

  5. [linux]centos7.4安装nginx

    下载nginx wget http://nginx.org/download/nginx-1.5.6.tar.gz 解压包安装在/opt/nginx. 目录下, 1.安装gcc(centos 7之后一 ...

  6. (数据科学学习手札131)pandas中的常用字符串处理方法总结

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常开展数据分析的过程中,我们经常需要对 ...

  7. [cf1458D]Flip and Reverse

    将$s$中的01分别变为$1,-1$,即得到一个序列$a_{i}$(设其长度为$n$,下标范围为$[1,n]$) 对$a_{i}$建立一张有向图,其点集合为$Z$,并对$\forall 0\le k& ...

  8. COS 音视频实践 | 多种姿势让你的视频“跑”起来

    导语 随着4G/5G时代的到来,短视频/直播行业开始流行,音视频逐渐成为信息传播中流量占比最大的部分.腾讯云对象存储(COS)作为可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务, ...

  9. 【k8s】在AWS EKS部署并通过ALB访问k8s Dashboard保姆级教程

    本教程适用范围 在AWS上使用EKS服务部署k8s Dashboard,并通过ALB访问 EKS集群计算节点采用托管EC2,并使用启动模板. 使用AWS海外账号,us-west-2区域 使用账号默认v ...

  10. docker 启动报错:Docker.Core.Backend.BackendException: Error response from daemon: open \\.\pipe\docker_e

    win10 docker启动后报错: Docker.Core.Backend.BackendException:Error response from daemon: open \\.\pipe\do ...