• 编写Shell脚本


    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 +选项"禁止该选项起作用。如果只想对程序的某一部分进行调试,则可以将该部分用上面两个语句单独划出来。

  • 相关阅读:
    263 相对布局之3— 相对布局的综合案例
    262 相对布局之2— 相对布局的属性设置
    leetcode-----110. 平衡二叉树
    leetcode-----109. 有序链表转换二叉搜索树
    leetcode-----108. 将有序数组转换为二叉搜索树
    leetcode-----107. 二叉树的层次遍历 II
    leetcode-----106. 从中序与后序遍历序列构造二叉树
    leetcode-----105. 从前序与中序遍历序列构造二叉树
    leetcode-----104. 二叉树的最大深度
    leetcode-----103. 二叉树的锯齿形层次遍历
  • 原文地址:https://www.cnblogs.com/noticeable/p/8686071.html
Copyright © 2020-2023  润新知