[sh]shell脚本栗子
我会定期的把看到的一些好的shell和py脚本搜集在这里,供参考学习:
命令行回收站
推荐一个不相关的:trash-cli,就是命令行版的回收站,它的神奇之处在于不是简单的把文件移动到回收站,而且可以在回收站里恢复。所以它说自己是Command line interface to the freedesktop.org trashcan,我的 zshrc 里有一行:alias rt="trash"
shell资源:
常用的一些script:
检查操作系统,内核,多少bit等
https://github.com/lannyMa/ops_doc/tree/master/LazyManage
执行时候加参数 -h start等
https://github.com/johanhaleby/kubetail/blob/master/kubetail
理解linux一个方言: 2>&1
http://chuansong.me/n/1108379451851
https://github.com/spujadas/elk-docker/blob/master/elasticsearch-init
100-shell-script-examples
https://github.com/itech001/100-shell-script-examples
数组操作
数组的定义,遍历
for((i=0;i<${#arr[*]};i++));do
echo ${arr[i]}
done
echo
echo '---------------'
for i in ${arr[@]};do
echo $i
done
取指定数组范围:
$ a=(1 2 3 4 5)
#从下标1开始取,取3位。
$ echo ${a[@]:1:3}
2 3 4
参考: https://github.com/influxdata/influxdata-docker/blob/master/influxdb/1.4/entrypoint.sh
#!/bin/bash
set -e
if [ "${1:0:1}" = '-' ]; then
set -- influxd "$@"
fi
if [ "$1" = 'influxd' ]; then
/init-influxdb.sh "${@:2}"
fi
exec "$@"
性能等
创建一个300M的文件,预分配空间
fallocate -l 300M bigfile
查帮助
- 中文化sh
yum install man-pages-zh-CN -y
echo 'LANG="zh_CN.UTF-8"' >> ~/.bashrc
echo 'LANGUAGE="zh_CN:zh"' >> ~/.bashrc
source ~/.bashrc
- shell自动补全
yum install bash-com*
- 查看shell选项
man sh
脚本出错退出
set -ue 遇到错误退出
-x debug模式
生成序列
{2..10}
seq 10
for ((i=0,i<10;i++));do done
for i in `ls /`;do
echo ${i}_$(date +%F)
done
seq分割,tr替换某个字符
{}只能搞连续的
echo {1..10}
seq可以搞不连续的
$ seq -s ':' 1 10|tr ":" "-"
1-2-3-4-5-6-7-8-9-10
$ seq -s ':' 1 2 10|tr ":" "-"
1-3-5-7-9
分割 开始 步长 结束
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST
判断变量是否存在
man sh
-z 如果变量值长度为0,则为真
-d
-f
-w 可写
-x 可执行 --启动脚本是否可执行
-e 是否存在.--配置文件是否存在
数学运算
$[$a+$b]
监控网卡流量(数据包个数/字节数)
#!/usr/bin/env bash
#/sys/class/net/eth0/statistics/rx_packets: 收到的数据包数据
#/sys/class/net/eth0/statistics/tx_packets: 传输的数据包数量
#/sys/class/net/eth0/statistics/rx_bytes: 接收的字节数
#/sys/class/net/eth0/statistics/tx_bytes: 传输的字节数
#/sys/class/net/eth0/statistics/rx_dropped: 当收到包数据包下降的数据量
#/sys/class/net/eth0/statistics/tx_dropped: 传输包数据包下降的数据量
function get_pkgs(){
rx_packets=$(cat /sys/class/net/eth0/statistics/rx_packets)
tx_packets=$(cat /sys/class/net/eth0/statistics/tx_packets)
rx_bytes=$(cat /sys/class/net/eth0/statistics/rx_bytes)
tx_bytes=$(cat /sys/class/net/eth0/statistics/tx_bytes)
rx_kb=$[$rx_bytes/1024/1024]
tx_kb=$[$tx_bytes/1024/1024]
}
function print(){
get_pkgs
echo -n "数据包/收: ";
echo -n "数据包/发: ";
echo -n "数据包/发-字节: "${rx_kb} Mb;
echo -n "数据包/收-字节: "${tx_kb} Mb;
sleep 1
}
while :;do
print
echo
sleep 1
done
判断参数个数
function help(){
echo "usage: xxx
this is a test
"
}
# 参数总数
#if [ $# -eq 0 ];then
# help
#elif [ $1 == "22" ];then
# echo "22 happy"
#else
# echo "default..."
#fi
# 参数是否存在
if [ ! -z "$1" ];then
echo $1
else
echo "very sad"
fi
判断执行参数和目录是否存在
参考: https://github.com/jenkinsci/docker/blob/master/plugins.sh
set -e
echo "WARN: plugins.sh is deprecated, please switch to install-plugins.sh"
if [ -z "$1" ]
then
echo "
USAGE:
Parse a support-core plugin -style txt file as specification for jenkins plugins to be installed
in the reference directory, so user can define a derived Docker image with just :
FROM jenkins
COPY plugins.txt /plugins.txt
RUN /usr/local/bin/plugins.sh /plugins.txt
Note: Plugins already installed are skipped
"
exit 1
else
JENKINS_INPUT_JOB_LIST=$1
if [ ! -f "$JENKINS_INPUT_JOB_LIST" ]
then
echo "ERROR File not found: $JENKINS_INPUT_JOB_LIST"
exit 1
fi
fi
如果参数不对,输出help信息
usage="${PROGNAME} <search term> [-h] [-c] [-n] [-t] [-l] [-s] [-b] [-k] [-v] -- tail multiple Kubernetes pod logs at the same time
where:
-h, --help Show this help text
-c, --container The name of the container to tail in the pod (if multiple containers are defined in the pod).
Defaults to all containers in the pod. Can be used multiple times.
-t, --context The k8s context. ex. int1-context. Relies on ~/.kube/config for the contexts.
-l, --selector Label selector. If used the pod name is ignored.
-n, --namespace The Kubernetes namespace where the pods are located (defaults to \"default\")
-s, --since Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to 10s.
-b, --line-buffered This flags indicates to use line-buffered. Defaults to false.
-e, --regex The type of name matching to use (regex|substring)
-j, --jq If your output is json - use this jq-selector to parse it.
example: --jq \".logger + \\\" \\\" + .message\"
-k, --colored-output Use colored output (pod|line|false).
pod = only color pod name, line = color entire line, false = don't use any colors.
Defaults to line.
-z, --skip-colors Comma-separated list of colors to not use in output
If you have green foreground on black, this will skip dark grey and some greens -z 2,8,10
Defaults to: 7,8
--timestamps Show timestamps for each log line
--tail Lines of recent log file to display. Defaults to -1, showing all log lines.
-v, --version Prints the kubetail version
examples:
${PROGNAME} my-pod-v1
${PROGNAME} my-pod-v1 -c my-container
${PROGNAME} my-pod-v1 -t int1-context -c my-container
${PROGNAME} '(service|consumer|thing)' -e regex
${PROGNAME} -l service=my-service
${PROGNAME} --selector service=my-service --since 10m
${PROGNAME} --tail 1"
if [ $# -eq 0 ]; then
echo "$usage"
exit 1
fi
ansible备份scm的脚本
- hosts: scm-server
remote_user: root
vars:
- sfpath: "/data/backup/scm-data/*_$(date +%F -d '-1 day')_scmdata.tar.gz"
- dfpath: "/data/data/backup/scm-data/"
tasks:
- name: Package | prepare the tar data on scm-server
# 0, clean the backup dir /data/backup/scm-data
# 1, copy the /root/.scm to /data/backup/scm-data
# 3, tar today's scm data
raw:
cd /data/backup/scm-data \
&& \rm -rf *.tar.gz .scm \
&& cp -r /root/.scm /data/backup/scm-data/ \
# 192.168.x.x_2017-12-12_scmdata.tar.gz
&& tar zcf /data/backup/scm-data/`ifconfig|sed -n '2p'|awk -F':' '{print $2}'|awk '{print $1}'`_$(date +%F -d '-1 day')_scmdata.tar.gz .scm
- name: SYN_PKG | syn the today's scm data to backup server
synchronize:
src: "{{ sfpath }}"
dest: "{{ dfpath }}"
mode: pull
# 远程解压
# - name "this vm restore scm data to test data on app"
# unarchive:
# src: "{{ dfpath }}"
# dest: /root
# remote_src: True
- hosts: scm-server
remote_user: root
tasks:
# 清理本地scm压缩包,仅保存7天的压缩包.
- name: Keeps scm-data.tar.gz of 7 days in local
shell: find /data/data/backup/scm-data/ -name "*.tar.gz" -type f -mtime +7|xargs rm -f
# 完事后,发邮件.
- name: sendMail to op
mail:
host: smtp.sina.com
port: 25
username: maotai@sina.com
password: 123456
from: maotai@qq.com (maotai)
to: maotai2 <maotai2>
# cc: John Doe <j.d@example.org>, Suzie Something <sue@example.com>
# attach: /etc/fstab /etc/hosts
subject: scm_data backup successfully
body: 'System {{ ansible_hostname }}-192.168.x.x from 192.168.y.y scm-data/backup has been successfully provisioned.'
[sh]shell脚本栗子的更多相关文章
- [svc]entrypoint.sh shell脚本解析
最近搞influxdb绘图,看到其dockerfile的entry.sh,无奈看的不是很懂. 于是查了下.. docker run 通过传参实现配置文件覆盖 实现启动镜像时候可指定配置文件 如果不指定 ...
- shell脚本学习第一课
shell是一种程序设计语言,是访问操作系统内核的服务. Linux的shell种类常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell ...
- shell 脚本关键字&符号
shell概念 "shell"既是一种解释型编程语言,也是一个这种编程语言的解释器的名字 shell是解释型语言,就是解释器会一条一条的翻译每一条语句并执行,对比之下,C语言是编译 ...
- Shell - Shell脚本调试方法
Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...
- 第1章:认识Shell脚本
第一章:认识Shell脚本 1.1.什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. 实际上Shell是一个命令解释器 ...
- Shell脚本编程与文件系统修复
导读 Linux基金会发起了LFCS认证(Linux 基金会认证系统管理员)Linux Foundation Certified Sysadmin,这是一个全新的认证体系,旨在让世界各地的人能够参与到 ...
- shell脚本实例一
一. 什么是shell 脚本时一种解释性语言: shell脚本保存执行动作: 脚本判定命令的执行条件 脚本来实现动作的批量执行.二.如何创建 vim test.sh ##shell脚本一般都 ...
- Linux就该这么学--Shell脚本条件语句(二)
1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...
- Linux 执行定时任务 shell脚本
Linux上面执行定时任务,我们可以利用crontab -e直接编辑定时任务 另外我们还可以写好shell脚本,定时去执行shell脚本,这两个方法都可以起到定时执行的作用 下面我详细说一下入如何执行 ...
随机推荐
- 解决用户自生成meta导入kylin后报错问题Can not deserialize instance of java.lang.String[] out of VALUE_STRING token
报错栈: -- ::, ERROR [http-bio--exec-] cube.CubeManager: : Error during load cube instance, skipping : ...
- Install Tomcat 7 on CentOS, RHEL, or Fedora
linux下的 Tomcat 安装: http://www.davidghedini.com/pg/entry/install_tomcat_7_on_centos
- echarts使用技巧(一)echarts的图表自适应resize问题、单选、缩放等
这些东西要是有精力和时间可以通读echarts文档,里面都有配置详细介绍.该博客只是把自己使用echarts遇到的问题记录下,并不全,加深印象,抛砖引玉而已,完整学习的请移步官方文档 1.legend ...
- C#基础视频教程5.3 如何编写简单的超级热键
跟前面一章讲解计算器一样,到最后一小节,我们总是要把代码规整好,让整个程序显得非常简洁,先做个文件夹把我们自定义的类库都放进去 然后我们开始整理Form1里面的代码,为了实现超级热键的功能,我们应 ...
- Emacs在RHEL 5上的安装和使用
1. install latest emacs xz -d emacs-24.3.tar.xz tar xvf emacs-24.3.tar ./configure make make install ...
- profiler跟踪事件存为表之后性能分析工具
使用profiler建立跟踪,将跟踪结果存到表中,使用下面存储过程执行 exec temp_profiler 'tra_tablename'对表数据进行处理归类,然后进行性能分析 1.先建存储过程 2 ...
- 旧文备份:简单CANOpen 协议说明
(十年前的旧文,不舍等扔) 创建日期:2005-11-17 修改日期:2005-11-17 文件名称:简单CANOpen 协议说明.doc 作者:winshton 版本:V1.0 (注:本文以24in ...
- 在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)
转自:http://blog.csdn.net/season_hangzhou/article/details/36423223 一.安装硬盘到物理机上. 二.查看硬盘是否正确安装. 使用“fdisk ...
- GG中obey命令的使用
obey命令的使用. 我们能够将一些在GGSCI命令行工具中输入的命令,放到一个文件里. 比如将以下的命令,放到direnv/db.oby文件里. ADD EXTRACT d_ncbs, EXTTRA ...
- 使用samba实现linux与windows文件共享
1,安装samba sudo apt-get install samba ...