linux学习18 shell脚本基础-bash变量和逻辑运行
一、回顾
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变量和逻辑运行的更多相关文章
- linux学习19 shell脚本基础-bash脚本编程基础及配置文件
一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由 ...
- Linux学习之Shell编程基础
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Shell脚本基础学习
Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...
- Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...
- Linux生产服务器Shell脚本分享
Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
随机推荐
- centos上安装grafana
wget https://dl.grafana.com/oss/release/grafana-6.2.5-1.x86_64.rpm yum localinstall grafana-6.2.5-1. ...
- 百度前端技术学院task1.10
任务十:Flexbox 布局练习 面向人群: 有一定HTML及CSS基础的同学 难度: 中 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容 ...
- Python转义序列
正则表达式参考:https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
- mongodb数据库环境配置
数据是每一前端人员必定接触的一样,所有的数据都是后端来编写,如果自己想练习项目,却没有数据,而是写一些假数据,去编写,或者通过json-server搭建一个数据,今天我们就通过MongoDB来搭建一个 ...
- golang学习笔记 go 相关命令
go build 命令一些可选项的用途和用法 在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包.当然,如果被依赖的代码包的归档文件(*.a)不存在,或者源码文件有了变化,那么 ...
- C#调用WebService(服务引用-xml)
情形:做接口调用三方WebService,WebService地址外网无法访问 方案: Step1:内网环境(可访问三方WebService地址,此处地址以http://127.0.0.1/WebSe ...
- c# 对XML进行数字签名并且让java验签成功
实现: 1.c#将xml报文做数字签名发送到java服务,java服务成功验签. 2.c#服务对收到java服务推送的xml报文成功验签. 前提: 1.java服务要求 遇到问题: 1.Java和.n ...
- 我是如何一步步编码完成万仓网ERP系统的(七)产品库设计 3.品牌图片跨域上传
https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...
- 前端跨域之Jsonp实现原理及.Net下Jsonp的实现
jsonp的本质是通过script标签的src属性请求到服务端,拿到到服务端返回的数据 ,因为src是可以跨域的.前端通过src发送跨域请求时在请求的url带上回调函数,服务端收到请求时,接受前端传过 ...
- Python多任务—线程
并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已) 并行:指的是任务数小于等于cp ...