zoukankan      html  css  js  c++  java
  • linux-shell编程-1-简介

    shell的种类

    /bin/sh:Bourne Shell,是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。

    /bin/bash:Bourne Again Shell,LinuxOS 默认的,它是 Bourne Shell 的扩展。

    /sbin/nologin

    /bin/dash

    /bin/tcsh,是 Linux 提供的 C Shell 的一个扩展版本。

    /bin/csh:C Shell,是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。

    查看当前使用的shell

    [root@node0 ~]# echo $SHELL

    /bin/bash

    在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

    #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

    /bin/sh和/bin/bash是软连接

    [root@node0 ~]# ll /bin/bash

    -rwxr-xr-x. 1 root root 877480 Jul 24 2015 /bin/bash

    [root@node0 ~]# ll /bin/sh

    lrwxrwxrwx. 1 root root 4 Jun 2 23:58 /bin/sh -> bash

     

    shell脚本扩展名,习惯使用.sh结尾,扩展名并不影响程序执行

    运行shell脚本的方法

    1、作为可执行程序执行

    chmod +x test.sh

    相对路径执行:./test.sh

    绝对路径执行:/tmp/test.sh

    2、作为解释器参数执行

    /bin/sh test.sh

    这种方式运行shell程序,不需要为脚本增加可执行权限,脚本内可以不写#!/bin/sh

    3、使用source执行

    source test.sh

    sh和source执行的区别

    sh执行脚本,脚本在子shell中执行,脚本中的变量不会出现在父shell中

    source执行脚本,脚本在当前shell中执行,脚本中的变量会出现在当前shell中

    [root@node0 tmp]# cat test.sh

    #!/bin/sh

    a='abc'

    echo '123'

    [root@node0 tmp]# sh test.sh

    123

    [root@node0 tmp]# echo $a #sh执行脚本,脚本在子shell中执行,脚本中的变量不会出现在父shell中

     

    [root@node0 tmp]# source test.sh

    123

    [root@node0 tmp]# echo $a #source执行脚本,脚本在当前shell中执行,脚本中的变量会出现在当前shell中

    abc

    脚本编程语言和编译型语言的差异

    1、像C、C++、JAVA都是编译型语言,这类语言需要编译器将源代码编译为目标代码(二进制文件)

    好处:高效

    缺点:多运行于底层,处理某些任务较为复杂

    2、shell、python是脚本语言,是解释型语言,由解释器读入程序代码并执行,不需要编译

    好处:比编译型语言的层级要高,可以轻易的处理一些文件、目录之类的简单任务,而无需很复杂的代码

    缺点:运行速度慢、不支持多任务

    脚本的跟踪执行

    sh –x test.sh

    [root@node0 tmp]# sh -x test.sh

    + a=abc

    + echo 123

    123

    脚本中set –x打开跟踪功能,set +x关闭跟踪功能

    [root@node0 tmp]# cat test.sh

    #!/bin/sh

    set -x

    a='abc'

    set +x

    echo '123'

    [root@node0 tmp]# sh test.sh

    + a=abc

    + set +x

    123

  • 相关阅读:
    SQL-LINQ-Lambda 语法对照
    C#.NET面向对象(语法点)
    4.5 基于STM32+MC20远程短信控制开关
    4.4 使用STM32控制MC20进行GPS帧数据解析
    4.3 使用STM32控制MC20进行GPRS通讯
    4.2 使用STM32控制MC20发送短信
    4.1 使用STM32控制MC20拨打电话
    3.6.使用STC89C52控制MC20解析GPS的经纬度数据上传到指定服务器
    3.5.基于STC89C52+MC20的短信远程控制开关LCD1602显示
    3.4 使用STC89C52控制MC20解析GPS的经纬度数据在LCD1602上显示
  • 原文地址:https://www.cnblogs.com/jeancheng/p/13068894.html
Copyright © 2011-2022 走看看