一、shell脚本介绍

1、使用脚本的原因

其中使用脚本的一个最主要的原因是因为一个字“懒”,在处理自动循环或者大的任务方面可以偷懒且省时间,如果有处理一个任务的命令清单,一个任务可能是将文件分类、向文件插入文本、迁移文件、从文件中删除行、清除系统过期文件、以及系统一般的管理维护工作等等。创建一个脚本,在使用一系列系统命令的同时,可以使用变量、条件、算术和循环快速创建脚本以完成相应工作。这比在命令行下一个个敲入要节省大量的工作时间。s h e l l脚本可以在行命令中接收信息,并使用它作为另一个命令的输入。

2、一个脚本的介绍

$ vim cleanup
#!/bin/sh
#name:cleanup
#this is a general cleanup script
echo "starting cleanup...wait"
rm /usr/local/apps/log/*.log
tail -40 /var/adm/messages > /tmp/messages
rm /var/adm/messages
mv /tmp/messages /var/adm/messages
echo "finished cleanup"
$ chmod u+x cleanup
$ ./cleanup

脚本的第一行总是以#!/bin/sh开始,通知shell使用系统上的Bourne shell解释器,

第二,三行为注释行,介绍脚本内容,非必须;

第四----九行为要运行的而脚本内容

chmod u+x cleanup给用户执行脚本的权限

./cleanup是运行脚本,之所以不能使用cleanup,是应为当前目录不在PATH下

二、条件测试

条件测试就如同c语言中返回0或者1的条件表达式,在shell脚本中格式有所不同

1、测试文件状态

-d 目录
-f 正规文件
-L 符号链接
-r 可读
-w 可写
-x 可执行
-s 文件长度大于0、非空
-u 文件有suid位设置

文件状态即该文件是个啥玩意

注意:条件的两边都要有空格,[]前后各一个空格

$ [ -w scores.txt ]  or test -w scores.txt
$ echo $?
0

2、测试时使用逻辑操作符

-a  逻辑与,可以用all注记

-o 逻辑或,可以用or注记

$ [ -r result.xls -a -w scores.txt ]
$echo $?
0

3、字符串测试

字符串测试是错误捕获很重要的一部分,特别在测试用户输入或者输出尤为重要,字符串测试有如下5种格式

1 test "string"
2 test string_operator "string"
3 test "string" string_operator "string"
4 [ string_operator string ]
5 [ string string_operator string ]

注:其中string_operator可为:

= 两个字符串相等

!= 两个字符串不等

-z 空字符串

-n 非空串

  • 判断环境变量是否为空
$ [ -z $EDITOR]
$ echo $?
1
  • 判断环境变量是否为vi

    $ [ $EDITOR="vi" ]

4、测试数值

测试数值可以使用很多操作符,格式如下:
test "number" numberic_operator "number"

或者

[ "number" numberic_operator "number" ]

numberic_operator可为:

-eq     数值相等 equal

-ne     数值不相等 not equal

-gt      大于  greater than

-lt        小于 less than

-le       小于等于 less equal

-ge      大于等于  greater equal

$ NUMBER=130
$[ "$NUMBER" -eq "130"]
$echo $?
0 $[ "$NUMBER" -gt "130"]
$echo $?
0

5、expr用法,表达式,取整

expr命令的一般格式:expr argument operator argument,

注意:operator两边的空格不能省略;当operator为乘法符号*时,必须使用\*进行屏蔽其特殊含义

  • 基本用法
$ expr 10 + 10
20
$ expr 900 + 600
1500
$ expr 30 / 3
10
$ expr 3 /* 3
9
  • 增量计数

    $ LOOP=0
    $ LOOP='expr $LOOP + 1'

    从expr命令接受输出并将之放入循环变量

  • 数值测试
$ expr rr + 1   //测试一个数,试图计算非整数时,返回错误
expr: non-numeric argument

(十四)、shell脚本之shell基础(上)的更多相关文章

  1. 转载:shell脚本之前的基础知识

    转载地址:http://www.92csz.com/study/linux/12.htm 第十二章 学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果 ...

  2. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  3. shell脚本之编程基础介绍

    1.shell脚本简介 1.1 shell是什么? shell是一个命令解释器,它在操作系统的最外层负责直接与用户对话,把用户的输入解释给操作系统:并处理各种各样的操作系统的输入,将结果输出到屏幕返回 ...

  4. shell脚本学习—Shell执行脚本

    Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命 ...

  5. 第十二章 学习 shell脚本之前的基础知识

    http://www.92csz.com/study/linux/12.htm [什么是shell] 简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具.实际上,在shell和 ...

  6. 大数据系列博客之 --- 深入简出 Shell 脚本语言(基础篇)

    首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...

  7. 学习shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

  8. shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

  9. shell脚本之不同系统上ftp交互使用

    场景:当公司将有文件要自动将ubuntu系统的文件要上传到windows上面,或者windows上的文件要下载到ubuntu上面,尤其是像什么日志啊,编译结果啊,测试结果啊等等,做个备份或者做分析处理 ...

随机推荐

  1. Java集合【7】--List接口超级详细解析

    目录 1.List接口的特性 2.List接口的源码解析 3.相关子类介绍 3.1 ArrayList 3.1.1 成员变量 3.1.2 构造方法 3.1.3 常用增删改查方法 添加元素 查询元素 更 ...

  2. 学习关注:学习C++的前景

    许多朋友都有这样的疑问,学习C/++能做什么?有什么好处?薪资怎么样,下面就为大家来解答! 像前面的文章有提到过,计算机专业位列热门专业第一门,可想前景如何.C语言C++属于高级语言,适合人类编写,现 ...

  3. SSM之Spring框架--->>墨盒案例

    分析: 程序中包括打印机(Printer).墨盒(Ink).和纸张(Paper).三类组件 首先创建一个新项目文件Spring_Box 我们来定义墨盒和纸张的接口类 墨盒接口Ink.java文件内容如 ...

  4. Spring Boot 中使用 Spring Security, OAuth2 跨域问题 (自己挖的坑)

    使用 Spring Boot 开发 API 使用 Spring Security + OAuth2 + JWT 鉴权,已经在 Controller 配置允许跨域: @RestController @C ...

  5. 小白也能看懂的mySQL进阶【单表查询】

    目录 1.查询基础 SELECT语句基础 列的查询 为列设定别名 常数的查询 过滤表中重复数据 根据WHERE语句来选择记录 注释的书写方法 算术运算符和比较运算符 算术运算符 需要注意NULL 比较 ...

  6. Docker实战 | 第三篇:Docker安装Nginx,实现基于vue-element-admin框架构建的项目线上部署

    一. 前言 在上一文中 点击跳转 通过IDEA集成Docker插件实现微服务的一键部署,但 youlai-mall 是前后端分离的项目,除了后端微服务的部署之外,当然还少不了前端工程的部署.所以本篇讲 ...

  7. 关于java链接装载的思考

    遇到个bug,noClassFoundEx,很常见. 但是问题来了. 比如我的服务器目录是 /opt/tomcat/webapps/ROOT/WEB-INF/classes/cn/controller ...

  8. Java虚拟机之内存区域

    原创文章,转载请标明出处! 目录 一.背景 二.运行时内存区域概述 1.官方描述 2.中文翻译 3.内存区域简述 4.运行时数据区简图 5.运行时数据区详图 三.JVM线程 JVM数据区域与线程关系 ...

  9. PyQt(Python+Qt)学习随笔:QDockWidget停靠部件floating和features属性

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 1.floating属性 floating属性表示QDockWidge ...

  10. 第十五章 使用PyQt进行Python图形界面程序开发

    在基础知识部分的最后一章<第十三章 Python基础篇结束章>的<第13.3节 图形界面开发tkinter>简单介绍了Python内置图形界面标准库tkinter,当时特别强调 ...