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

相关推荐

  • N25-第五周

    – 1     显示/boot/grub/grub.conf中以至少一个空白字符开头的行;     grep "^[[:space:]]\+" /boot/grub/grub.conf2 显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的…

    Linux干货 2017-01-02
  • 分享 (History,Ls,感悟 )

    1.History 选项   -c: 清空命令历史   -d offset: 删除历史中指定的第offset个命令    n: 显示最近的n条历史   -a: 追加本次会话新执行的命令历史列表至历史文件   -n: 读历史文件中未读过的行到历史列表   -r: 读历史文件附加到历史列表 &…

    2017-07-15
  • 马哥教育网络21期+第四周作业博客

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/ && mv /home/skel&nbsp…

    Linux干货 2016-09-05
  • 单网卡多IP,双网卡实现负载

        有些时候会我们一个IP不够用,但是又不想加网卡,可以试试一个网卡实现多个IP,下面我们来操作一下。 生成新增IP配置文件信息;  [root@localhost network-scripts]# cat ifcfg-eth0      DE…

    Linux干货 2016-09-06
  • Linux发展史

    Linux发展史 操作系统出现前:   1946年第一台计算机诞生–20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式。程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片…

    Linux干货 2016-10-14
  • Linux基本知识之echo命令详解

    该博文以CentOS6.8_x86_64系统为基础,Xshell使用pts/X终端登录CentOS6.8系统,以root身份登录系统。 为什么学习echo命令?     echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串。…

    Linux干货 2016-07-29