zoukankan      html  css  js  c++  java
  • Shell简介

    一、Shell脚本建立

    1、什么是shell

      Shell是一个命令解释器,它在操作系统的最外层负责直接与用户对话,把用户的输入解释给操作系统,并且处理操作系统的输出结果,输出到屏幕给用户。这种对话方式可以是交互方式或者非交互式(脚本)的。

    2、什么是Shell脚本

    当Linux命令或者语句不在命令行下执行,而是通过一个程序文件执行时,该程序就被称为shell脚本。用户在shell脚本中写入一系列的命令语句组合,并且将这些命令、变量和流程控制语句有机的组合在一起就形成了一个功能强大shell脚本。

    3、Shell脚本的建立

    在Linux中Shell脚本通常是在编辑器(vi/vim)中编写的,脚本的第一行会指出由哪一个解释器来执行脚本中的内容,比如:

    #! /bin/bash
    #
    # network       Bring up/down networking
    #
    ...

      脚本中开头的"#!"被称为幻数,在执行bash脚本时,内核会根据“#!”后的解释器来确定使用何种解释器来解释脚本的内容。值得注意的是这一行必须顶行来写。另外有时在脚本中会看到顶行的解释器写的是/bin/sh,这与/bin/bash有什么区别呢?

    [root@localhost init.d]# ll /bin/sh
    lrwxrwxrwx. 1 root root 4 Oct  1 14:27 /bin/sh -> bash

      可以看到/bin/sh是/bin/bash的软链接,没什么区别,不过一般系统自带的shell脚本使用/bin/bash,用户自定义的一般指定/bin/sh。假如脚本中不指定解释器的话(第一行省略)就会使用系统默认的解释器,也就是bash,不过最好还是自己写上,比较符合规范。

      另外就是shell中使用"#"进行注释,"#"后面的内容不会被解释器执行,只是单纯的注释,方便开发人员与自己查看功能说明,注释内容可以单起一行,也可以写在脚本后面。

    4、规范

    • 开头指定脚本解释器
    • 脚本中尽量使用英文注释,避免乱码
    • 脚本以.sh作为扩展名
    • 对于()、[]等成对的一次写出来,并且[]中内容两侧有空格;
    • 流程控制与迭代语句一次将结构写完整,然后再写中间内容

    二、Shell脚本执行

      当shell脚本以非交互式的方式运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(比如.bashrc、.bash_profile、/etc/profile等),然后从该环境变量文件开始回字形,当读取了ENV文件后,shell才开始执行shell脚本中的内容。

      shell脚本的执行通常有以下三种方式:

    • bash test.sh 或 sh test.sh
    • ./test.sh(当前路径执行脚本)
    • source test.sh 或. test.sh

      第一种方式是脚本文件本身没有可执行权限时常使用的方法,推荐使用bash执行;第二种方式需要将脚本文件的权限改为可执行(chmod u+x test.sh),然后通过脚本路径就可以执行脚本了;第三种方式是使用source或者"."点号加载sehll脚本文件,该方式可以将脚本中变量或者函数导出到当前环境中进行调用。

    #使用source或者"."可以将脚本中的变量获取,但是如果使用其它两种方式,#脚本一旦执行完毕后获取不到变量
    
    [root@localhost project]# echo 'user=`whoami`' > test.sh
    [root@localhost project]# . test.sh 
    [root@localhost project]# echo $user
    root

    但是如果使用其它两种执行方式是没有这种效果的:

    # 输出为空
    [root@localhost project]# echo 'user=`whoami`' > test.sh
    [root@localhost project]# /bin/sh test.sh 
    [root@localhost project]# echo $user
    ...
  • 相关阅读:
    整理一下反射
    数据查询--整理(更新中)
    【Django】Django model与数据库操作对应关系(转)
    给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)
    c++和QT实现俄罗斯方块,使用GraphicsView。
    C语言的动态函数库和静态函数库的生成和使用(linux环境下)
    linux内核驱动的知识要点
    简单的linux内核移植知识
    快速排序c++/c实现
    c语言系统函数——进程的创建
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14232821.html
Copyright © 2011-2022 走看看