bash特性以及shell脚本简介

bash的特性之多命令执行的逻辑关系:
1.命令替换
COMMAND1 $(COMMAND2)
2.管道
COMMAND1 | COMMAND2 | COMMAND3 ...
3.顺序执行结构
COMMAND1 ; COMMAND2 ; COMMAND3 ...
4.选择执行结构:
如果...那么...
要么...要么...
逻辑运算:
与:逻辑乘法,1--真,0--假,&&,双目操作符
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0

        "与"运算的短路运算法则:只要第一个操作数为false,则其逻辑运算结果一定为false;

        或:逻辑加法,1--真,0--假,||,双目操作符
            1 || 1 = 1
            1 || 0 = 1
            0 || 1 = 1
            0 || 0 = 0

        "或"运算的短路运算法则:只要第一个操作数为true,则其逻辑运算结果一定为true;

        非:逻辑取反,1--真,0--假,!,单目操作符
            !0 = 1
            !1 = 0

    命令的执行状态返回值:
        SUCCESS:0--TURE(true)
        FAILURE:1-255--FALSE(false)

        COMMAND1 && COMMAND2

        表示:
            1.如果COMMAND1能够成功执行,那么将会执行COMMAND2;
            2.如果COMMAND1执行失败,那么COMMAND2将不会被执行;

        COMMAND1 || COMMAND2

        表示:
            1.只有COMMAND1执行失败,COMMAND2才会被执行;
            2.如果COMMAND1执行成功,那么COMMAND2就不会被执行;

        !COMMADN1 && COMMAND2 相当于 COMMAND1 || COMMAND2
        !COMMAND1 || COMMAND2 相当于 COMMAND1 && COMMAND2

        德·摩根定律
        !(COMMAND1 && COMMAND2) || COMMAND3
        !(COMMAND1 || COMMAND2) && COMMAND3

        !A && B = A || B
        !A || B = A && B

        !(A && B) = !A || !B
        !(A || B) = !A && !B

三种逻辑运算的优先级:
    !>&&>||

示例:
    如果用户user4存在并且其家目录也存在,那么就执行userdel -r user4命令;

    id user4 &&  ls -d /home/user4 && userdel -r user4

bash脚本编程:
什么叫编程?
使用人类自然语言或机器语言进行程序源代码书写的过程。

为什么要编程?
    为了能够让用户在使用计算机的时候,可以让计算机以非交互的方式完成某些任务;此时,用户需要将此类任务编辑称为一个文件,并且让计算机按照特定书序进行任务读取,从而实现预期的功能;

为了让计算机能够解读此类文件的内容并正确的予以执行,必须将程序源代码文件转换为计算机可以直接识别并使用的二进制格式,此转换过程称为编译;而想要完成编译过程,必须使用特定的编译器工具;因此,无论使用何种编程语言进行程序编写,都必须严格按照编译器所能够识别的特定格式和语法结构进行程序编写;

编程语言:
    高级语言:
        根据源代码的处理方式分类:
            编译型语言:
                源代码 --> 编译器(编译) --> [链接器(链接) --> ] 汇编器(汇编) --> 可以执行的二进制代码文件;
            解释型语言
                源代码 --> 解释器(逐行解释) --> 边解释边执行

        根据编程过程中的功能实现是调用库还是调用外部程序文件分类:
            完整编程语言:
                利用库或编程组件进行编程;
            脚本编程语言:
                利用解释器调用被选择的外部应用程序;

        根据程序的编写规范分类:
            过程式语言:
                程序 = 指令 + 数据
                以指令为中心,围绕指令的功能实现设计数据和数据结构,数据为指令服务;
                算法和指令的实现形式:
                    顺序执行
                    选择执行
                    循环执行

            面向对象语言:
                程序 = 算法 + 数据结构
                以数据和数据结构为中心,将数据实例化,围绕数据的需求来部署算法;
                    类(Class):被实例化的数据;
                    属性(attibution):同一类中的不同对象的区分依据;
                    方法(method):类的正确的操作方法;

    低级语言:
        汇编语言:

    机器语言:二进制语言

shell脚本编程——bash脚本编程:
    过程式编程语言,解释运行的编程语言,脚本类语言(依靠外部应用程序文件运行)

shell脚本到底是什么?
    1.纯文本文档——文件中所有存储或包含的指令+数据都是以字符为单位进行存储的;
    2.根据用户的需求来解决用户问题的简单或复杂的命令组合体;
    3.是一种具有"执行幂等性"的程序实体;
        执行幂等性:任何命令的一次执行结果和多次执行结果是一致的;

        注意:
            很多命令都不具备"执行幂等性",因此在shell脚本中需要使用大量的程序逻辑来判断某个命令是否符合其运行条件,从而避免在运行过程中出现的严重错误;

shell脚本中的代码内容如何书写?
    1.首行必须是shebang,即:解释器程序的绝对路径,必须占据绝对行首且必须单独占据第一行;在执行脚本时,会根据shebang的指示,启动相应的解释器以解释脚本被诸多的命令;
        #!/bin/bash
        #!/bin/sh
        #!/usr/bin/python
        #!/usr/bin/perl
        ...

    2.在shell脚本中,除了shebang之外,所有行首为#字符的行,均被解释为注释行;即:解释器只会解释其内容,但并不予以执行;

    3.解释器会忽略脚本文件中所有的空白行;空白行指的是:在一行文本中,除了空白字符,空格字符,制表字符之外不具备其他任何类型字符的行;

    4.大量的命令和关键字
        命令:内部或外部应用程序
        关键字:内置于shell,只能在某种特定结构体中执行的命令;keyword;
            如:if, else, then, do, while, for, select, until, case, fi, esac,...

    5.shell中的所有的特殊功能字符;

    注意:所有被编写进shell脚本文档的命令、关键字及符号必须是ASCII编码格式的字符,其他编码格式的字符可以出现在shell脚本文件中,但不具有任何特殊含义;

如何编写shell脚本?
    可以利用所有的文本文档编辑工具进行shell脚本编写,如:
        nano, vi, vim, pico, emacs, ...
        通常在Linux的各发行版本中,推荐使用vim;

脚本文件的命名方式:
    一般情况下,会为脚本设置".sh"的名称后缀;较低版本的编辑工具,会根据文件的后缀名称来识别是否为shell脚本文件;交高版本的文本编辑工具,如vim7,无需过多的关系文件后缀名的问题。

脚本的运行方式:
    1.为脚本文件赋予执行权限,可以直接以绝对路径或相对路径的方式运行此文件;
        # chmod +x /PATH/TO/SOME_SCRIPT_FILE
        # /PATH/TO/SOME_SCRIPT_FILE

        注意:如果脚本文件所在目录路径存储于PATH变量中,则直接以脚本文件名来执行即可;

    2.直接使用解释器运行脚本,将脚本文件作为解释器程序的参数;
        # bash /PATH/TO/SOME_SCRIPT_FILE
            bash命令的常用选项:
                -x:使bash在解释脚本的过程展示在标准输出上;一般用于为shell脚本排错
                -n:对脚本文件进行预执行,以分析脚本中是否存在语法类错误;如果没有错误,则不输出任何信息;相反,则输出简洁的提示信息;具体的错误定位需要自行判断;

        注意:此种方式中,脚本文件是否有执行权限并不是很重要的属性;

    注意:以上两种方式,在执行脚本时,会在当前shell中开启一个新的子shell以运行脚本;一般情况下,当脚本运行结束,该子shell也会被随之销毁;因此,所有在脚本中定义的变量,在脚本的末尾处,最好将其明确的撤销;

    3.使用source命令运行脚本;
        # source /PATH/TO/SOME_SCRIPT_FILE
        # . /PATH/TO/SOME_SCRIPT_FILE

        注意:
            1.source命令不会在运行脚本时开启子shell,而是在当前shell中运行;
            2.使用source命令执行的脚本中不要包括诸如exit类的命令;

原文地址:http://blog.51cto.com/13487800/2129799

时间: 2024-10-10 02:06:44

bash特性以及shell脚本简介的相关文章

Linux Shell——bash shell 脚本简介

bash shell 脚本简介 shell 运行环境 如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash shell 的,所以你不需要额外配置所谓的开发环境. 我的 shell 环境是 macOS Sierra 版本,如果你用的是其他 Linux 系统,后面的例子基本上都是可以运行的. 首先,打开Terminal 命令行,先检查下你的系统的 shell 版本: echo $BASH_VERSION bas

Linux学习笔记——bash命令及shell变量简介

bash 及其特性 shell  外壳 GUI :Gnome  KDE  xface CLI :shell  csh  ksh  bash 程序,进程 进程:每个进程看来,当前主机上只存在内核和当前进程 进程是程序的副本,进程是程序执行实例 用户的工作环境: bash: #   root用户 $   普通用户 shell  ,子shell bash : 1.命令历史 2.管道,重定向 3.命令行编辑 4.命令别名 5.命令行展开 6.文件名通配 7.变量 8.编程 命令行使用技巧: Ctrl +

bash配置与shell脚本编程

写在前面: 博客书写牢记5W1H法则:What,Why,When,Where,Who,How. 本篇主要内容: ● bash特征之多命令执行 ● 逻辑运算(与或非) ● 编程语言简介 ● shell脚本格式与特点 ● bash配置,定制bash工作特征 ● 扩展 intall mktemp 本篇涉及配置文件: ◎ /etc/profile ◎ /etc/profile.d/*.sh ◎ /etc/bashrc ◎ ~/.bash_profile ◎ ~/.bashrc ◎ ~/.bash_log

shell脚本简介及常用文本编辑命令

什么是脚本? 脚本简单地说是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的,可以通过记事本打开和编辑 为什么要学习和使用shell shell属于内置脚本 程序开发的效率非常高,依赖于功能强大的命令可以迅速的完成开发任务(批处理) 语法简单,代码写起来比较轻送,简单易学 shell简介 shell是一个C语言编写的脚本语言,它是用户与linux的桥梁,用户输入命令交给shell处理,shell将相应的操作传递给内核,内核把处理的结果输出给用户 Linux 基本思想有两点:第一,一切

Linux学习笔记:bash颜色显示及shell脚本相关

bash的颜色显示规则: ASCII编码对于颜色进行设置: \033 :ctrl键 [:控制字符和颜色代码之间的间隔字符 0m:关闭颜色属性的命令: 1m:对于显示文本字符加粗 4m:为文本字符加下划线标识 5m:使文本字符闪烁 7m:将文本字符的背景色和前景色交换显示: 8m:将文本字符的背景色和前景色设置为相同颜色. 30m-39m:设置文本字符的前景色:38m和39m暂时没用 40m-49m:设置文本字符的背景色:48m和49m暂时没用 一个完整的程序,一般包含四类文件: 二进制文件(可执

Linux Shell脚本简介

Shell 诞生于 Unix,是与 Unix/Linux 交互的工具,单独地学习 Shell 是没有意义的,请先参考Unix/Linux入门教程,了解 Unix/Lunix 基础. 近几年来,Shell一直被忽略,是一个不受重视的脚本语言.Shell虽然是Unix的第一个脚本语言,但它是相当优秀的.它结合了延展性与效率,持续保有独具的特色,并不断的被改良,使它多年来能与那些花招很多的脚本语言保持抗衡. Shell需要依赖其他程序才能完成大部分的工作,这或许是它的缺陷,但它不容置疑的长处是:简洁的

java 调用bash shell脚本阻塞的小问题的解决

java  调用bash shell脚本阻塞的小问题的解决 背景 使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结果给web 界面显示. 现象: Java 进程阻塞.使用ps命令可以看到被调用的shell 的执行进程状态为S 分析 Shell子进程的状态是S 睡眠状态,也就是该进程在等待某个条件满足,方能继续执行. Java程序在调用Runtime.getRuntime().exec(jyName)之后,lin

Shell脚本编程具体解释

第12章 Shell脚本编程   l  Shell命令行的执行 l  编写.改动权限和运行Shell程序的步骤 l  在Shell程序中使用參数和变量 l  表达式比較.循环结构语句和条件结构语句 l  在Shell程序中使用函数和调用其它Shell程序 12-1   Shell命令行书写规则 u  Shell命令行的书写规则 对Shell命令行基本功能的理解有助于编写更好的Shell程序,在执行Shell命令时多个命令能够在一个命令行上执行,但此时要使用分号(:)分隔命令,比如: [[emai

Shell 脚本入门--上

大家好!今天分享的是一些shell脚本的基础知识,分篇为大家介绍,本篇介绍内容有:变量(分类.赋值.查询.引用).算数运算的实现. shell脚本简介 计算机高级语言分为两种类型,一种是面向对象型(如java.c#).一种是面向过程型(如shell.python).性质上的区别在于面向对象型试用于大型复杂的环境,可以更加精确细致的提供服务,缺点就是语法结构繁琐且严谨.而面向过程的语言,简单便捷好上手,但是不适用于复杂的环境.打个比方:现在有个大型的机械项目,一位经验丰富的老设计师,带着几位年轻的