实际案例

1.判断接收参数个数大于1

[ $# -lt 1 ] && echo "至少需要一个参数" && { echo "我要退出了.... "; exit; } || echo "搞到参数"

2.统计文件夹 和 文件数

let etcd=`ls -l /etc| grep "^d"|wc -l`

let etcf=`ls -l /etc| grep "^-"|wc -l`

let sum=$[$etcd+$etcf]

3.取某列的最大值

number=`df | grep '^/dev' | tr -s " " " "|cut -d" " -f5|tr -s "%" " "|sort -n|tail -n1`

4.短路条件判断

[ $# -ne 2 ] && echo "need two args" && exit

5.统计文件的空白行

let b=`grep '^$' $2|wc -l`

6.ping通远程主机

ping -c2 $1 &> /dev/null
    [ $? -eq 0 ] && echo "$1 可以被ping通" || echo "$1 不可以被ping通"

7.一次性删除大批量文件

ls |xargs rm -rf 当删除的文件数量过多,超过了所支持的参数数量上限时,可配合管道及xargs来删除。

8.删除文件中不连续的重复行

    sort -k2n file | uniq > a.out

当file中的重复行不再一起的时候,uniq没法删除所有的重复行。经过排序后,所有相同的行都在相邻,因此unqi可以正常删除重复行。

9.分组倒序排序列表

cat access_log | cut -d" " -f1|sort|uniq -c|sort -nr|head -n10

10.把多条命令当成一条命令集合来执行

id $1 &> /dev/null && echo "$1 user has added" || { useradd $1; echo "add user $1 success"; }

11.查看文件夹和文件的大小  du    -sh

[root@centos7 ~]# du -sh appserver/     appserver是目录
      5.0M          appserver/
   [root@centos7 ~]# du  -sh  f1                  f1是文件
      4.0K         f1

12.查看端口占用情况

1、lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000

可以看到8000端口已经被轻量级文件系统转发服务lwfs占用

2、netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,netstat -tunlp |grep 8000

shell编程知识点

1.(cmd1;exit;) 和 {cmd2;exit;}的区别

()会开启一个子线程,exit退出的是子进程,对执行线程没有影响

{ }不会开启子线程,exit退出的是执行进程本身.

2.source .bashrc和bash .bashrc的区别

source 表示.bashrc在当前shell进程中运行

bash 会开启一个子shell进程来执行当前shell 脚本

3.字符串匹配

[ "$var"="ha" ] 精确判断$var字符串是否等于ha
      [[ "$var" ~="regx" ]]
      [ x"$var"="x" ] 判断$var字符串是否为空

4.变量格式的保留

echo $name 把所有的行压缩成了一行,不保留文件内容换行格式.
     echo "$name" 添加双引号保留原文件内容的换行格式.

5.bash调试方式

     1.检查语法错误                          bash -n test.sh
     2.跟踪调试执行脚本                 bash -x test.sh

6.bash的配置文件

1.全局配置
              1./etc/profile
               2./etc/profile.d/*.sh
               3./etc/bashrc
        2.个人配置
               1.~/.bash_profile
               2.~/.bashrc

7.shell和其它语言的不同之处

shell把空字符串和1相加运算会得到1,并不会提示错误.其它语言空类型是不能和整数进行运算的

[root@centos7 ~]# a=""
[root@centos7 ~]# b=a+
[root@centos7 ~]# echo b
b
[root@centos7 ~]# echo $b
a+
[root@centos7 ~]# let b=a+
[root@centos7 ~]# echo $b

shell脚本编写实例的更多相关文章

  1. shell脚本编写mind

    首先我们要缩小这个问题的范围 如果在面试中被问到这样的问题,说说shell脚本编写思路 如:你是在公司主要负责zabbix监控的 对答如下:shell脚本这个说法挺广的,您看我这么跟您说吧,我在平时工 ...

  2. shell脚本编写方法

    shell脚本编写就如同一门语言,涉及到运行环境.基本语法.变量定义.函数.参数(系统参数).条件判定.执行流程控制 等等问题. 本文就以下几个方面进行描述: 运行环境: shell  shebang ...

  3. 7. Shell 脚本编写

    一.Shell 脚本编写 1.提示用户输入一个字符串,如果是 hello,打出 yes,并每秒输出 "hello,world",否则就输出 no,实现如下: #!/bin/bash ...

  4. Shell awk文本处理,shell脚本编写

    Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...

  5. 基于数组的shell脚本编写

    基于数组的shell脚本编写 2017年08月17日 22:56:36 momokuku123 阅读数:369 数据:变量,文件,数组 变量:存储单个元素的内存中的一块存储空间 数组:存储多个元素的内 ...

  6. shell脚本编写nginx部署脚本

    下面为shell脚本编写的nginx的安装及修改nginx.conf的脚本,脚本比较简单: #!/bin/bash function yum_install(){ yum install epel-r ...

  7. shell脚本编写自动启动服务方法

    shell脚本编写自动启动服务方法 前言 ln :创建连接文件 默认创建的是硬连接,好比复制 ,但是两个文件会同步命令:ln ./java/android/aa.txt aaa s :创建的是软连接变 ...

  8. shell 脚本编写基础

    在进行Linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入 ./smartzip就能运行脚本了.. 每行 ...

  9. shell脚本编写笔记

    包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...

随机推荐

  1. [Linux] 设置系统时区

    1. 检查当前时区 以 root 身份登录. # date Fri Sep :: UTC 其中 UTC 是指当前使用的时间系统为世界标准时间,也称世界协调时间.英文名称为 Coordinated Un ...

  2. Kafka 2.0 ConsumerGroupCommand新功能

    一直觉得kafka-consumer-groups.sh的输出信息有点少,总算在2.0中得到了改善.新版本ConsumerGroupCommand增加了查看成员信息.组状态信息,算是弥补了之前的不足. ...

  3. Python下载安装

    https://www.python.org/downloads/ https://www.editplus.com/ftp/epp510_1828.exe  EditPlus 5.1

  4. Spark LogisticRegression 逻辑回归之建模

    导入包 import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache.s ...

  5. linux环境变量配置,转载地址:http://blog.sina.com.cn/rss/1650981242.xml

    学习总结 1.Linux的变量种类按变量的生存周期来划分,Linux变量可分为两类:1.     永久的:需要修改配置文件,变量永久生效.2.     临时的:使用export命令行声明即可,变量在关 ...

  6. zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection

    zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection错误 查看zabbi ...

  7. DB2 rollforward 命令使用详解

    DB2 rollforward 命令使用详解 原文:https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1003wuc ...

  8. 体验 PHP under .NET Core

    昨天在 The week in .NET 中发现 Scott Hanselman 的这篇博文 Peachpie - Open Source PHP Compiler to .NET and WordP ...

  9. grafana----alert

    Alert只有grafana V4.0以上. Introduction(介绍) Grafana中的alert允许在dashboard panels你附加一些规则.当你保存仪表板Grafana将提取的报 ...

  10. 【每日一题】 UVA - 1587 Box 二维有点偏序的感觉

    一开始用set存xjb分类讨论,然后wa, 然后简化了一点,改用vector,然wa 最后又发现没有初始化,然wa wa了一个半小时 最后看了题解orz 然后找了一组样例把自己的代码改对了 /* 1 ...