Linux bash 特性、相关变量以及编程

Linux bash 特性、相关变量以及编程

bash 特性之:命令hash

缓存此前执行过的命令(都是外部命令,不记录内嵌命令),加速命令的执行

hash 
  -d 清空指定命令记录
  -r 直接清空hash表

bash 特性之一: 变量 程序=指令+数据 指令是有文件提供 数据是由:IO设备,文件,变量,管道

程序:算法+数据结构

变量类型:存储格式、表示数据范围、参与的运算

编程语言

 bash把所有变量统称为作为字符型
 bash中变量无需事先声明;相当于,把声明和赋值过程同时实现
 变量替换,变量名指定的内存数据空间赋值给另外一个变量
 变量引用:$(var_name),$var_name
 变量命名:字母,数字,下划线,但是不能以数字开头,见名之意,且不能用程序的关键

 bash变量类型
     本地变量(当前shell),环境变量(当前shell以及子进程),局部变量(当前shell的某个进程的变量),位置参数变量(执行脚本传递的参数,特殊变量(shell内置的有特殊功能的变量比如"?"
查看变量:set ,撤销变量:unset NAME
  环境变量
  1),export name=value
  2),name=value;export name
  3),name=value; declare -x name
  4),declare -x name=value
注意:bash内嵌了许多环境变量,用于定义bash工作环境(基本都是大写,PATH,HOME,HISTFILE...)
  查看环境变量:env,declare -x,printenv 
  撤销环境变量:unset name
  只读变量:declare -r name;或者 readonly name ;生命周期随shell结束而结束

bash特性之多命令执行

~]# COMMAND1;COMMAND2;COMMAND3;.......
逻辑运算
    与,或,非,异或(相同为0,不同则为1)
    与:短路法则:COMMAND1 && COMMAND2,第一个命令执行状态是否成功,决定后一个                                          反

shell编程

编程的语言的分类:根据运行分类

编译运行:源代码---> 编译器(编译) ---> 程序文件
    C语言,
解释运行:源代码--->运行时启动解释器,由解释器边解释边运行

根据编程过程中功能实现是调用库还是外部程序文件

shell脚本编程 利用系统上的命令及组件进行编程

完整编程 利用库或者编程组件进行编程

编程模型:过程式编程语言和面向对象编程语言
 过程式:以指令为中心来组织代码,数据服务于代码
     顺序执行,选择执行,循环执行
对象式:以数据为中心来组织代码,围绕数据来组织指令
   类(class):实例化对象,method

shell 编程:过程式编程,解释运行,依赖于外部程序文件运行

如何写shell脚本: 脚本第一个行:顶格:给出shebang,解释器路径,用于指明解释执行当前脚本的解释器程序文件 常见的解释器

        #!/bin/bash
        #!/usr/bin/python
        #!/usr/bin/perl

编辑器:nano,sed, vim,vi

命令的堆积:但是很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行过程发生错误而终止

  运行脚本:
    运行的过程:是先启动/bin/bash (#!/bin/bash),才开始执行这个脚本文件内的命令(堆积的命令)
    1),赋予执行权限,并直接运行此脚本程序文件
    2),直接用解释器运行,将脚本以命令行参数传递给解释器程序;~]# bash 脚本文件
    3)"." 或者 source 
注意:空白行直接被忽略,如果要直接加入echo,注释用"#",

bash 配置文件 profile类:为交互式登陆的shell进程提供配置 su – username ;终端输入账号和密码登陆的终端 bashrc类:为非交互式登陆shell进程提供配置 su username ;图形界面下打开终端:运行脚本也是(执行脚本是打开了一个子shell)

profile类:
    全局:对所有用户都生效
        /etc/profile
        /etc/profile.d/*.sh
   用户个人:仅对当前用户有效:~/.bash_profile
   功能:1,用于定义环境变量
            2,运行命令或脚本
bashrc类:
    全局:多有所有用户生效
        /etc/bashrc
    用户个人:仅对当前用户有效:~/.bashrc
    功能: 1,定义本地变量
          2,定义命令别名

配置文件读取次序:

交互式登陆shell:/etc/profile --> /etc/profile.d/*---> ~/.bash_profile--> ~/.bashrc --> /etc/bashrc
非交互式登陆shell:  ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*
 ~]# source 配置文件 或者 ~]# . 配置文件   #重启配置文件,让当前shell生效

原创文章,作者:不忘初衷,如若转载,请注明出处:http://www.178linux.com/65254

(0)
不忘初衷不忘初衷
上一篇 2016-12-29 17:39
下一篇 2016-12-29 21:46

相关推荐

  • 谨记初心

    谨以此文记录我从小白成长的心路历程与技术的成长

    Linux干货 2018-03-26
  • 马哥教育网络班N22期+第5周课程练习

    马哥教育网络班N22期+第5周课程练习 1. 显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;  grep -E "^[#][[:space:]]+[^[:space:]].*" /etc/rc.d/rc.sysinit 2. 显示…

    Linux干货 2016-09-19
  • 文件权限管理

    文件权限               [root@CentOS6 ~]# ll 3.txt            &nb…

    Linux干货 2016-08-04
  • 脚本又见脚本,作业又是作业_第七周

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@centos ~]# fdisk -l &n…

    Linux干货 2016-12-30
  • 第二周作业

    # 第二周作业 ##1.文件管理类命令 ###cp   复制 * 单元复制 如果目标文件不存在,会自动创建 如果已经存在,会覆盖 * 多源复制 目标必须是目录,分别复制每个文件至目标目录中,并保持原名 > -i: 交互提醒 > -f: 强制覆盖,不交互 > -r: 递归复制目录 > -d: 如果复制的是符号链接,不找源文件,…

    Linux干货 2016-12-09
  • 第一天作业

    一、计算机的组成部分         现代计算机的组成是根据冯.诺依曼体系,包括5大部件存储器、控制器、运算器、输入设备和输出设备。             1.存储器包括内部存储器和外部存储器;内部存储器包括内部硬盘、内存、缓存等,外部存储器包括移动硬盘、光…

    Linux干货 2016-08-15