1、脚本的编写

  Shell脚本本身是一个文本文件,这里编写一个简单的程序,在屏幕上显示一行helloworld!

脚本内容如下:

#!/bin/bash

#显示“Hello world!"

echo "hello world!"

运行命令和结果如下:

2、Shell脚本的基本构成

  编写Shell程序首先要了解Shell脚本的基本构成。下面为一个复杂一些的脚本示例,用于显示当前日期时间、执行路径、用户账户及所在的目录位置。

#!/bin/bash
#这是一个测试脚本
echo -n "当前时间和日期"
date
echo -n "程序执行路径:" $PACH
echo "当前用户名: `whoami`"
echo -n "当前路径:"
pwd
#end

  运行结果

通常,在第一行以“#”开头指定Shell脚本的运行环境,即声明该脚本使用哪个Shell程序运行。Linux中通常的Shell脚本解释器有bash、sh、csh、ksh等,其中bash是Linux默认的Shell。

以#开头的行为注释行,Shell在执行时会忽略"#"之后的所有内容。

echo命令用来显示提示信息,参数-n表示在显示信息时不自动换行。不加该参数,默认会在命令最后自动加上一个换行符以实现自动换行。

whoami字符串的左右的反引号(`)用于命令替换,也就是将他所括起来字符串视为命令执行,并将其输出的字符串在原地展开。

3、包含外部脚本

  像其他语言一样,Shell也可以包含外部脚本,将外部脚本的内容合并到当前脚本。包含外部脚本文件的用法如下:

. 脚本文件名

或者

source 脚本文件名

这里将第二个脚本合并到第一个脚本中,即为

#!/bin/bash
#显示“Hello world!"
echo "hello world!"
. example1

运行结果如下

4、执行Shell脚本

  执行Shell脚本有三种方式:

(1)在命令行提示符下直接执行

  将Shell脚本的权限设置为可执行,然后在命令行提示符下直接执行它就如我们之前示例里的一样。

需要注意的是,直接百年祭生成的脚本文件是没有执行权限的,如果要将Shell脚本直接当作命令执行,需要使用chmod命令将其设置为具有权限执行。

chmod +x example

  这里值得注意的是,如果包含外部脚本,被包含的脚本并不需要有执行权限。另外在图形界面中也可使用文件管理器来设置权限,允许脚本作为程序执行文件。  

  如果想像命令行那样直接输入脚本文件名,还需要让脚本所在的目录被包含在环境变量PATH 所定义的命令搜索路径中,否则就要明确指定脚本文件的路径,执行命令echo $PATH可查询当前的搜索路径(通常为/bin、/sbin、/usr/bin、/usr/sbin)。如果放置Shell脚本文件的目录不在当前的搜索路径中,可以将这个目录追加到搜索路径中。

(2)在指定的Shell下执行脚本

  可以在指定的Shell下执行脚本,以脚本名作为参数。基本用法如下:

Shell 名称 脚步名

  这种运行方式是直接运行Shell解释器,其参数就是Shell脚本的文件名,如:

sh hello

运行结果为:

  从运行结果可以看出这种方式无法在脚本中调用外部脚本。

  不过显然这种方式运行的脚本不必在第一行指定Shell解释器,即使指定了,也会忽略。而且由于是通过解释器来执行的,就不需要脚本文件具备执行权限。

  这种方式还能在脚本名后面带有参数,从而将参数值传递给程序中的命令,使一个Shell脚本可以处理多种情况,就如同函数调用时可根据具体问题给定相应的实参。所以这种方法多用来进行脚本调试。

(3)将输入重定向到Shell脚本

  还可以将输入重定向到Shell脚本。让Shell从指定文件中读入命令行,并进行相应处理,其一般形式为:

bash < 脚本名

例如

  bash < example1表示Shell脚本从文件example1中读取命令,并执行他们。

5、Shell脚本的调试

  通过对Shell脚本的调试,可以查找和消除错误。在bash中,Shell脚本的调试主要是利用bash命令解释程序的选项来实现。其格式如下:

bash [选项] 脚本名

  其中,主要利用bash命令解释程序的-V或-x选项来跟踪程序的执行。例如:

  通常,-v选项允许用户查看Shell程序的读入和执行。如果在读入命令行时发生错误,则终止程序的执行。每个命令行被读入后,Shell按读入时的形式显示出该命令行,然后执行命令行。而-x选项也允许用户查看Shell程序的执行,但它是在命令行执行前完成所有的替换后,才显示出每一个被替换后的命令行,并且在行前加前缀符号“+”(变量赋值语句不加"+"符号),然后执行命令。

  两者的主要区别在于:使用-v选项,会打印出命令行的原始内容;使用-x选项,打印出经过替换后的命令行的内容。这两个选项也可以在Shell脚本内部用“set -选项”的形式引出,用"set +选项"禁止该选项起作用。如果只想对程序的某一部分进行调试,则可以将该部分用上面两个语句单独划出来。

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

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

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

  2. 在windows下编写shell脚本

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

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

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

  4. 编写Shell脚本的最佳实践

    编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...

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

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

  6. CentOS下编写shell脚本来监控MySQL主从复制的教程

    这篇文章主要介绍了在CentOS系统下编写shell脚本来监控主从复制的教程,文中举了两个发现故障后再次执行复制命令的例子,需要的朋友可以参考下 目的:定时监控MySQL主从数据库是否同步,如果不同步 ...

  7. [转帖]编写shell脚本所需的语法和示例

    编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是sh ...

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

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

  9. 编写shell脚本实现对虚拟机cpu、内存、磁盘监控机制

    一.安装Vmware,并通过镜像安装centos7. 二.安装xshell(可以不装,可以直接在虚拟机中直接进行以下步骤) 三.安装mail 一般Linux发送报警邮件通过本地邮箱或外部邮箱服务器,这 ...

  10. 编写shell脚本的规范

    目录 编写shell脚本的一些规范 解释器 添加脚本版本和注释功能 添加脚本调试 变量命名 全局变量和局部变量 命名规范 函数命名 脚本命名 函数 引用模块或文件 脚本日志 配置文件 其他 编写she ...

随机推荐

  1. C#编译时,提示缺少NuGet包

    A--还原Nuget包前,一定要确保你配置了该项目的包源:如果你没有那就找别人要吧. 工具-选项-Nuget包管理器-程序包源 B--配置编译时自动还原缺少的nuget包: 工具-选项-Nuget包管 ...

  2. Canvas绘图 (html5新增特性)

    Canvas 使用<canvas>对象,需要设置属性:width,height.指定绘图的区域大小.在canvas标签前后出现的信息将在不支持<canvas>元素的浏览器中显示 ...

  3. HISAT,sTRINGTIE,ballgown三款RNA-seq信息分析软件

    HISAT,sTRINGTIE,ballgown三款RNA-seq信息分析软件 2015年04月02日 11:35:47 夜丘 阅读数:8940 标签: 生物 更多 个人分类: 论文笔记   Bowt ...

  4. Codeforces55D Beautiful numbers

    原题链接 虽然依旧是套模板,但是因为我太弱了,不会建状态,所以去看了题解.. 这里就直接引用我看的题解吧,写的不错的. 题解 //我的代码 #include<cstdio> #includ ...

  5. 20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结

    20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 在这次项目的完成过程中刘辰同学付出了很多,在代码的实践上完成的很出色,在技 ...

  6. 201621123008 《Java程序设计》 第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...

  7. ubuntu增加工作分区命令

    参考自: https://www.cnblogs.com/wolflowhereu/p/5422653.html ubuntu增加工作分区(workspace)命令 dconf write  /org ...

  8. 在linux虚拟机上安装Docker

    1.简介Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这个 ...

  9. QueryRunner类的八种结果处理集

    package cn.jy.demo; import java.sql.Connection; import java.sql.SQLException; import java.util.List; ...

  10. Oracle12c的卸载

    之前电脑装了Oracle12c 现在希望删除重新安装: 参照教程: http://jingyan.baidu.com/article/642c9d34e1cbdd644a46f7de.html E:\ ...