——《Linux就该这么学》笔记
Shell脚本命令的工作方式有两种
  交互式: 用户每输入一条命令就立即执行
  批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令

一个简单的脚本(hello.sh)
  #!/bin/bash
  #一个简单的脚本
  pwd
  echo "Hello,World"

解释:
  第一行: #! 用来告诉系统使用那种Shell解释器来执行该脚本
  第二行: # 注释
  第三、四行: 可执行的Linux命令

Linux中对文件扩展名没有要求,但是Shell脚本一般使用.sh后缀

脚本执行方式
  1. bash 脚本名.sh
  2. ./脚本名.sh (需要增加执行权限)

接收用户的参数
  Shell脚本使用$接收参数的变量,变量之间可以使用空格间隔
  $n(n不能为0): 对应着第n个位置的参数值
  固定值参数
    $0: 对应当前Shell脚本程序的名称
    $#: 总共有几个参数
    $*: 所有位置的参数值
    $?: 显示上一次命令的执行返回值

判断用户的参数
  测试语句格式: [ 条件表达式 ]
  注意: 条件表达式两边均应有一个空格
  条件测试语句分为4中:
    文件测试语句
    逻辑测试语句
    整数值比较语句
    字符串比较语句
  文件测试语句即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,参数如下:
    -d: 测试文件是否为目录类型
    -e: 测试文件是否存在
    -f: 判断是否为一般文件
    -r: 测试当前用户是否有权限读取
    -w: 测试当前用户是否有权限写入
    -x: 测试当前用户是否有权限执行
    文件测试语句返回值为0表示为真,非0表示为假
  逻辑测试语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果,有三种表示:
    "与"运算符: &&
    "或"运算符: ||
    "非"运算符: !
  整数值比较语句,只能对数字操作,不能将数字与字符串、文件等内容一起操作,运算符如下:
    -eq: 是否相等
    -ne: 是否不等于
    -gt: 是否大于
    -lt: 是否小于
    -le: 是否等于或者小于
    -ge: 是否大于或者等于
    整数值比较语句返回值为0表示为真,非0表示为假
  字符串比较语句,用于判断测试字符串是否为空值,或者两个字符串是否相同,运算符如下:
    =: 比较字符串内容是否相同
    !=: 比较字符串内容是否不同
    -z: 判断字符串内容是否为空
    字符串比较语句返回值为0表示为真,非0表示为假

流程控制语句
if条件测试语句
  分为单分支结构、双分支结构、多分支结构
  单分支结构
    if 条件测试操作
      then 命令序列
    fi
  双分支机构
    if 条件测试操作
      then 命令序列1
    else 命令序列2
    fi
  多分支结构
    if 条件测试操作1
      then 命令序列1
    elif 条件测试操作2
      then 命令序列2
    ..........
    else 命令序列n
    fi

for条件循环语句
  允许脚本一次性读取多个信息,然后逐一对信息进行操作处理
  语法格式
    for 变量名 in 取值列表
    do
      命令序列
    done
  for条件循环语句适用于循环次数确定的情况

while条件循环语句
  是一种让脚本根据某些条件来重复执行命令的语句,往往用来执行不确定最终执行次数的循环
  语法格式
    while 条件测试操作
    do
      命令序列
    done

case条件测试语句
  在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试,如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令
  case语法格式
    case 变量值 in
    模式1)
      命令序列1
      ;;
    模式2)
      命令序列2
      ;;
    .........
    *)
      默认命令序列
    esac

计划任务服务程序
  计划任务分为一次性计划任务与长期性计划任务
  一次性计划任务只执行一次,一般用于临时的工作需求
    设置一次性计划任务命令: at
    格式: at 时间
    取消一次性计划任务命令: atrm
    格式: atrm 任务序号
    可以使用 at -l 命令查看计划任务列表
  长期性计划任务是指周期性地、有规律地执行某些具体的任务
    创建、编辑计划任务的命令: crontab -e
    查看计划任务列表的命令: crontab -l
    删除计划任务的命令: crontab -r
    crontab命令: 分 时 日 月 星期 命令
    有些时间字段没有设置,可以使用星号(*)占位
    参数字段说明
      分: 取值为0-59的整数
      时: 取值为0-23的任意整数
      日: 取值为1-31的任意整数
      月: 取值为1-12的任意整数
      星期: 取值为0-7的任意整数,其中0与7均为星期日
      命令: 要执行的命令或程序脚本
    时间和命令之间使用空格间隔
    用逗号(,)来分别表示多个时间段
    用减号(-)来表示一段连续的时间周期
    用除号(/)来表示执行任务的间隔时间

Linux编写Shell脚本的更多相关文章

  1. Linux编写Shell脚本入门

    一. 一般编写shell需要分3个步骤 1. 新建一个脚本文件,并编写程序 vi hello.sh #!/bin/bash #注释 #输出 printf '%s\n' "Hello Worl ...

  2. linux脚本错误: line *: [: missing `]',linux编写shell脚本时的注意点

    转载:https://www.cnblogs.com/bovenson/p/4548079.html 关于shell的一些注意点,粘贴自拉钩教育精选评论:测试开发核心技术 46 讲-->第6讲 ...

  3. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

  4. linux环境下编写shell脚本实现启动停止tomcat服务

    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...

  5. 编写shell脚本遇到的问题

    运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”: 原因是因为Linux下的换行符是 \n 而你在 ...

  6. Linux常用Shell脚本珍藏【转载】

    我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...

  7. 在windows下编写shell脚本

    注意两点: 1.第一行:#!/bin/bash 2.将文档格式转换为unix,因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候, ...

  8. python编写shell脚本详细讲解

    python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...

  9. 从windows到linux的shell脚本编码和格式问题

    从windows到linux的shell脚本编码和格式问题   从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...

随机推荐

  1. Pro Git - 笔记1

    Getting Started About Version Control Local Version Control Systems Centralized Version Control Syst ...

  2. webmagic 二次开发爬虫 爬取网站图片

    webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫. webmagic介绍 编写一个简单的爬虫 webmagic的使用文档:http://w ...

  3. Java中IO——NIO

    一.引入 当引入一些新功能的时候,那说明之前的设计可能还需要完善. 1.阻塞式 在传统的IO输入输出中,如果我们从流中去读数据,而数据源中没有数据时,程序就会阻塞该线程.阻塞式线程的一种基本状态,可以 ...

  4. awk,rsync,重启,maxdepth一层目录,登录,开机自启动

    有100个日志文件,每个文件大约1G,每条日志都以 “H:i:s” 的时间格式开头,如: 05:02:04 xxx yyy zzz 因为是日志文件,所以肯定以时间为顺序的,现在可以确定的是,在某个文件 ...

  5. 【转】深入理解Java中的String

    原文链接:http://www.cnblogs.com/xiaoxi/p/6036701.html 一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码 ...

  6. 【bzoj2287】[POJ Challenge]消失之物 背包dp

    题目描述 ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢? ...

  7. Luogu3960 NOIP2017列队(splay/线段树)

    令splay中的一个点表示一段区间,需要使用其中某个点时将区间分裂即可,剩下的都是splay的基本操作了.写的非常丑陋,注意细节.感觉考场上肯定只能靠部分分苟活了.想起来去年因为各种莫名其妙的原因50 ...

  8. [CF1065C]Make It Equal

    题目大意:$n$列箱子,横向消除,一次可以把一行及以上的所有箱子消除,但是一次最多只可以消除$k$个,求最少用几次把箱子的高度变成一样 题解:贪心,求出比一个高度高的有几个箱子,消除即可 卡点:代码改 ...

  9. BZOJ1407 [Noi2002]Savage 【扩展欧几里得】

    题目链接 BZOJ1407 题解 枚举\(m\)用扩欧判即可 #include<algorithm> #include<iostream> #include<cstrin ...

  10. 【BZOJ4325】NOIP2015 斗地主 搜索+贪心

    这个东西考试的时候一眼以为状压就压炸了考试又了一下午.....最后我打出来发现后几个点10min都过不去,我大概算了一下,可能是吧.......最后一脸懵逼的我去怂了正解,我们发现只要确定了顺子就可以 ...