一、回顾

  1、用户管理,权限管理,install,mktemp

  2、用户管理:

  3、权限管理:

    mode,ownership

    mode:

      user

      group

      other

      r

      w

      x

  4、命令:install,mktemp

二、bash特性及bash脚本编程初步

  1、终端:附着在终端的接口程序

    GUI:KDE,GNome,Xfce

    CLI:/etc/shells

  2、bash的特性:

    a、命令行展开:~,{}

    b、命令别名:alias,unalias

    c、命令历史:history

    d、文件名通配符

    e、快捷键:Ctrl + a,e,u,k,l

    f、命令补全:$PATH

    g、路径补全:

  3、bash特性之命令hash

    a、缓存此前命令查找的结果,即命令hash。注意他只会缓存外部命令,内部命令因为是shell自带的所以不会缓存,包括hash自己也是。

[root@localhost ~]# hash
hash: hash table empty
[root@localhost ~]# ls /root/
anaconda-ks.cfg hello inittab
[root@localhost ~]# cat /etc/fstab > /dev/null
[root@localhost ~]# echo "wohaoshuai" > /dev/null
[root@localhost ~]# hash
hits command
/usr/bin/cat
/usr/bin/ls

    b、选项

      -d:忘记每一个已经记住的命令的位置

      -r:忘记所有记住的位置

[root@localhost ~]# hash
hits command
/usr/bin/cat
/usr/bin/ls
[root@localhost ~]# hash -d cat
[root@localhost ~]# hash
hits command
/usr/bin/ls
[root@localhost ~]# hash -r
[root@localhost ~]# hash
hash: hash table empty

    c、缓存对应的存储格式为:key-value

      key:搜索键

      value:值

三、bash的特性之:变量

  1、程序:指令+数据组成

    指令:由程序文件提供

    数据:IO设备,文件,管道,变量

    程序:算法+数据结构

  2、变量名+指向的内存空间

  3、变量赋值:name=value

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

    123,34=12334

  5、编程语言:

    强类型变量编程语言:比如C语言,python

    弱类型变量编程语言:

      比如bash,把所有变量统统视作字符型。bash不支持浮点数据,除非借助于外在工具。并且bash中的变量无需事先声明。相当于把声明和赋值过程同时实现。

        申明:类型,变量名

  6、变量替换:把变量名出现的位置替换为其所指向的内存空间中的数据。

  7、变量引用:${var_name},$var_name

  9、变量名:字母数字下划线组成的字符串,并且不能以数字开头。这个法则对所有的编程语言几乎都是一样的。

    变量名:见名知意,命名机制遵循某种法则。并且不能够使用程序的保留字,例如if,else,then,while等等

  10、bash变量类型

[root@node1 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─abrt-watch-log
├─abrtd
├─agetty
├─atd
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─dockerd─┬─docker-containe───8*[{docker-containe}]
│ └─8*[{dockerd}]
├─irqbalance
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rngd
├─rsyslogd───2*[{rsyslogd}]
├─smartd
├─sshd─┬─sshd───bash───su───bash
│ ├─sshd───bash
│ └─sshd───bash───pstree #我们pstree运行的位置
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}

    a、本地变量:作用域仅是当前shell进程

      变量赋值:name=value

      变量引用:${name},$name

        "":变量名会替换为其值

        '':变量名不会替换为其值

      查看变量: set命令

      撤销变量:unset name

        注意:此处非变量引用

[root@node1 ~]# first_name=wohaoshuai
[root@node1 ~]# echo ${first_name}
wohaoshuai
[root@node1 ~]# unset first_name
[root@node1 ~]# echo ${first_name}

    b、环境变量:作用域是当前shell进程及其子进程

      变量赋值:

        (1)、export name=value

        (2)、name=value

            export name (这样对子shell就有效了)

        (3)、declare -x name=value

        (4)、name=value

            declare -x name(这样也对子shell就有效了)

      变量引用:${name},$name

      注意:bash内嵌了许多环境变量(通常为全大写字符),用于定义bash的工作环境。

        PATH,HISTFILE,HISTSIZE,HISTFILESIZE,HISTCONTROL,SHELL,HOME,UID,PWD,OLDPWD

      查看环境变量:export,declare -x,printenv,env

      撤销环境变量:unset name

    c、只读变量:只读变量无法重新赋值,并且不支持撤销,存活时间为当前shell进程的生命周期,随shell进程终止而终止。

      (1)、readonly name

      (2)、declare -r name

[root@node1 ~]# firstname=wohaoshuai
[root@node1 ~]# echo ${firstname}
wohaoshuai
[root@node1 ~]# readonly firstname
[root@node1 ~]# firstname=wohaoshuai2
-bash: firstname: readonly variable
[root@node1 ~]# unset firstname
-bash: unset: firstname: cannot unset: readonly variable

    d、局部变量:当前shell进程中的某一个代码片段作用域(函数上下文)

    e、位置参数变量:向执行脚本的shell进程传递的参数

    f、特殊变量:通常是shell内置的有特殊功用的变量

      $?:

        0:成功

        1-255:失败

四、bash特性之多命令执行:

  1、COMMAND1;COMMAND2;COMMAND3;  :即执行完了第一个然后执行第二个,然后执行第三个...

  2、逻辑运算:

    运算数:真(true,yes,on,1)

        假(false,no,off,0)

    与:全真则真,一假全假

      1 && 1 = 1

      1 && 0 = 0

      0 && 1 = 0

      0 && 0 = 0

    或:

      1 || 0 = 1

      1 || 1 = 1

      0 || 1 = 1

      0 || 0 = 0

    非:

      ! 1 = 0

      ! 0 = 1

    异或:

    a、短路法则:前一个命令失败了后一个命令就不会执行,前一个命令成功了后一个命令才执行。

      COMMAND1 && COMMAND2

[root@node1 ~]# touch /tmp/test.etc && ls /etc/ > /tmp/test.etc
[root@node1 ~]# touchabc /tmp/test.etc && ls /etc/ > /tmp/test.etc2
-bash: touchabc: command not found
[root@node1 ~]# cat /tmp/test.etc2
cat: /tmp/test.etc2: No such file or directory

    b、如果前一个命令成功了后一个命令不运行,前一个命令失败了后一个命令才运行

      COMMAND1 || COMMAND2

[root@node1 ~]# id user1
id: user1: no such user
[root@node1 ~]# id user1 || useradd user1
id: user1: no such user
[root@node1 ~]# id user1
uid=(user1) gid=(user1) groups=(user1)

linux学习18 shell脚本基础-bash变量和逻辑运行的更多相关文章

  1. linux学习19 shell脚本基础-bash脚本编程基础及配置文件

    一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由 ...

  2. Linux学习之Shell编程基础

    转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...

  3. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  4. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  5. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  6. Shell脚本基础学习

    Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...

  7. Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...

  8. Linux生产服务器Shell脚本分享

    Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...

  9. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

随机推荐

  1. IDCode校验算法

    运行地址: https://c.runoob.com/compile/10 算法源码 public class HelloWorld { public static void main(String ...

  2. 解决Spring Cloud中Feign第一次请求失败的问题

    在Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题 com.netflix.hystrix.exception.HystrixTimeoutE ...

  3. 通过欧拉计划学Rust(第1~6题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以开始了Rust的快速入门学习. 看了一下网上有关Rust的介绍,都 ...

  4. python 爬取媒体文件(无防火墙)

    #coding = utf-8 import requests import pandas as pd import os,time root_path = './根目录/' input_file = ...

  5. apache启动错误 AH00072

    错误描述: make_sock: could not bind to address [::]:443 G:\Apache24\bin>httpd.exe -w -n "Apache2 ...

  6. [转载]DevExpress GridControl 使用方法技巧 总结 收录整理

    最近开始用DevExpress组件,发现很好的经验总结博客,在这里转载分享 原作者:https://www.cnblogs.com/wordgao/p/4517011.html 一.如何解决单击记录整 ...

  7. 数据库的dml、ddl和dcl的概念

    学过数据库肯定会知道DML.DDL和DCL这三种语言,这种基础概念性的东西是必须要记住的. DML(Data Manipulation Lanaguage,数据操纵语言) DML就是我们经常用到的SE ...

  8. NFS客户端挂载失败之authenticated unmount request from

    1.故障现象 客户端挂载时夯住,无反应,无报错,如下图: 2.故障前对挂载目录的操作 发现故障前挂载目录被误删除,后通过备份分为恢复 3.故障排查步骤 .检查客户端及服务端防火墙规则 .检查selin ...

  9. C# 文件监听类 FileSystemWatcher 属性

    属性: Path——这个属性告诉FileSystemWatcher它需要监控哪条路径.例如,如果我们将这个属性设为“C:Temp”,对象就监控那个目录发生的所有改变.IncludeSubDirecto ...

  10. 1 js中常用的操作

    总结一些前端js常用的操作 常用日期操作:前端开发常用 JS 方法 js中array.list.map的遍历:js遍历集合(Array,Map,Set) js中对象的定义:js创建自定义对象的几种方式 ...