一、回顾

  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. Python 标准数据类型

    标准数据类型: Number(数字)----int float bool complex(复数) String(字符串) List(列表) Tuple(元组) Dictionary(字典) Set(集 ...

  2. Django+nginx+gunicore+supervisor+阿里云主机 部署博客项目

    1 准备阶段 1 新鲜的阿里云主机 2 购买一个喜欢的域名 3 创建python的虚拟环境 2 阿里云主机的选取 咱们就是为了实验,我买了最便宜的阿里云主机 3 阿里云主机创建一个超级用户 3.1 默 ...

  3. ECMAScript 初探 - 对象篇

    一.对象 如果你用过 C++ 或 Java,肯定熟悉类(class).在 ECMAScript 中并没有 "类" 这个词, 其对应的是 "对象定义",不过这太拗 ...

  4. Java中List集合去除重复数据的六种方法

    1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...

  5. python网络爬虫(2)——scrapy框架的基础使用

    这里写一下爬虫大概的步骤,主要是自己巩固一下知识,顺便复习一下. 一,网络爬虫的步骤 1,创建一个工程 scrapy startproject 工程名称 创建好工程后,目录结构大概如下: 其中: sc ...

  6. Dozer JAVA的POJO 映射工具

    Dozerhttp://www.manongjc.com/article/50949.html JAVA的映射工具 BeanUtils dozer的使用方法https://blog.csdn.net/ ...

  7. 史上最全的音视频SDK包分享给大家

    史上最全的音视频SDK包分享给大家 概述一下SDK功能: 项目 详情视频通信  支持多种分辨率的视频通信语音通信  提供语音通信,可支持高清宽带语音动态创建房间  可以根据需要,随时创建房间H5 支持 ...

  8. Winfrom devexpress 通用权限框架

    毕业到现在也快两年了,手上的项目也有好几个,但总感觉不是狠理想,近来把手上杂七杂八的项目整理了一下,结合各个项目的优点,重新开发了一套winfrom+devexpress 通用权限(CS)框架(BS版 ...

  9. linux sed、awk、grep同时匹配多个条(并且 or 或者)

    同时匹配ABC 和 abc: sed -n '/ABC/{/abc/p}' awk '/ABC/&&/abc/{ print $0 }' grep -E '(ABC.*abc|abc. ...

  10. itextpdf使用中文字体的三种方式

    使用itextpdf时,默认的字体没有中文,总结了一下使用中文字体的方式. 1.使用windows系统下的字体,该种方式的具体操作可以看另一篇博客:https://www.cnblogs.com/wh ...