一、回顾

  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. sql 自动增加排序 并且初始值是000001

    declare @co_num  int,                @CoNum varchar(6) select co_num=count(*)+1 from tab             ...

  2. Debug 路漫漫-10:AttributeError: 'Embedding' object has no attribute 'get_shape'

    CNN的Embedding层报错: 报错:AttributeError: 'Embedding' object has no attribute 'get_shape' 查了下是这个问题: https ...

  3. Angular6 学习笔记——路由详解

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  4. Data Science: An overview

    Week 1 Data Science: An overview Objective: 1.Is data science the same as statistics or analysis? st ...

  5. tomcat闪退的解决思路

    用Tomcat总会遇到启动Tomcat闪退的问题. 什么叫闪退啊,就是闪一下,就退出了控制台. 都闪退了,为啥闪退也不知道呀,又没有错误信息,所以就要先阻止闪退,先看到错误信息,知道启动不起来的原因. ...

  6. 基础知识---委托和 lambda

    委托定义类型,类型指定特定方法签名. 可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数本身传递给另一方法再进行调用. 以下示例演示了委托的用法. ...

  7. eclipse jvm 参数配置

    双击tomcat服务器---->打开启动配置--->VM 自变量

  8. Springboot2+SpringSecurity+Oauth2+Mysql数据库实现持久化客户端数据

    目录 介绍 建表,初始化数据 工程配置 Authorization Server - Spring Security配置 Authorization Server - 授权服务器 Resource S ...

  9. JavaIO学习:字节流

    JavaIO流之字节流 字节流 抽象基类:InputStream,OutputStream. 字节流可以操作任何数据. 注意: 字符流使用的数组是字符数组,char[] chs : 字节流使用的数组是 ...

  10. EF Core中如何设置数据库表自己与自己的多对多关系

    本文的代码基于.NET Core 3.0和EF Core 3.0 有时候在数据库设计中,一个表自己会和自己是多对多关系. 在SQL Server数据库中,现在我们有Person表,代表一个人,建表语句 ...