马哥linux学习(bash shell学习)

  1. Shell原理

    在操作系统中,最底层是硬件,而硬件上面是内核(kemel),内核上面是库,库上面是应用程序,在众多的应用程序当中,有一个shell的应用程序,俗称外壳,用户是无法直接和内核交互的,那么就必须借助shell来实现系统的调用。图:

shell是工作在操作系统的最外层,而内核(kernel)则是工作在操作系统的最里层,由于内核听不懂人类语言,而我们也记不住内核语言,而两者的沟通就需要shell的支持了。

2、Bash:编程

程序控制结构,调用机器上命令程序文件进行程序编写;

外部命令:各应用程序提供;

程序:指令+数据

算法+数据结构

过程式编程:以指令为中心,设计算法,数据服务于算法;

对象式编程:以数据为中心,设计数据结构(类),程序服务于数据结构;

bash过程式编程:

顺序执行:逐个执行

选择执行:只执行其中一个分支

循环执行:一段代码要执行0,1或多遍

编程元素:变量、流程、函数

变量:可变化的量,命名内存空间

bash环境:

本地变量:当前shell进程;

环境变量:当前shell进程及其子进程;

局部变量:某个函数执行过程;

位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;

特殊变量:$?, $*, [email protected], $#, $$

变量类型:

数值,字符;

数值:

整数

浮点数

字符:

ASCII

120:

字符:1, 2, 0

数值:120 -->

变量类型的作用:

存储空间

运算

存储格式

语言对变量类型的支持力度:

强类型:

弱类型:变量类型不严格区分;

默认存储机制:bash为字符

bash的变量使用特点:弱类型、无须事先声明;

本地变量:

name=value

name: 变量名

=:赋值符号

value:值

变量名:只能包含数字、字母和下划线;且不能以数字开头;

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

引用:

弱引用: "", 其内部的变量引用会被替换为变量值;

强引用:‘‘,其变量的变量引用会保持原有字符;

命令引用:`COMMAND`, $(COMMAND),引用命令的执行结果;

声明为整型:

declare -i name[=value]

let name=value

查看所有变量:set

生命周期:

创建

销毁:

自动销毁:shell进程终止;

手动销毁:unset name

环境变量:

被"导出"的本地变量

export name[=value]

declare -x name[=value]

查看所有环境变量:env, printenv, export

销毁:

unset name

脚本:文本文件

运行脚本:事实上是运行一个bash进程,此进程负责从脚本文件中读取一个执行逻辑,而后由bash进程负责解析并运行此逻辑;

启动脚本:

(1) # bash /PATH/TO/SCRIPT_FILE

(2) 一个执行权限,

# ./PATH/TO/SCRIPT_FILE

shebang:

#!/bin/bash

第一行:顶格给出shebang

注释行:#

bash的常用选项:

-n: 检查脚本中的语法错误;

-x:调试执行脚本;

命令状态结果:

bash进程用于追踪执行的命令成功与否的状态:

0: 成功

1-255:失败

特殊变量:

$?:上一条命令的执行状态结果;

布尔型:

"真":成功

"假":失败

自定义脚本的状态结果:

exit [n]

注意:脚本中任何位置执行了exit命令即会终止当前shell进程;

条件测试:

界定程序执行环境;

(1) 根据运行的命令的状态结果;

(2) 测试表达式

test EXPRESSION

[ EXPRESSION ]

[[ EXPRESSION ]]

整数测试:隐含着做数值大小比较,所以不要给变量引用加引用;

$A -gt $B:是否大于;是则为"真",否则为"假";

$A -ge $B: 是否大于等于;

$A -lt $B:是否小于;

$A -le $B: 是否小于等于;

$A -eq $B: 是否等于;

$A -ne $B:是否不等于;

字符串测试:ASCII数值越大,字符比较时其值越大;

"$A" > "$B":是否大于;

"$A" < "$B":是否小于;

"$A" == "$B":是否等于;

"$A" != "$B":是否不等于;

-z "$A":是否为空;空则为"真",否则为"假"

-n "$A":是否不空;不空则"真",空则为"假"

注意:应该使用[[ EXPRESSION ]]

文件测试:测试文件的存在性以及属性;

-e $file: 是否存在;存在则为"真",否则为"假";

-a $file: 同上;

-f $file:文件是否存在且为普通文件;

-d $file:文件是否存在且为目录;

-h $file:是否存在且为符号链接文件;

-L $file: 同上

-b $file:是否存在且为块设备文件;

-c $file:是否存在且为字符设备文件;

-S $file:是否存在且为套接字文件;

-p $file: 是否存在且为管道文件;

-r $file: 当前用户对文件是否拥有读权限;

-w $file:当前用户对文件是否拥有写权限;

-x $file:当前用户对文件是否拥有执行权限;

-u $file:文件是否拥有SUID权限;

-g $file:文件是否拥有SGID权限;

-k $file

时间: 2024-10-11 01:36:00

马哥linux学习(bash shell学习)的相关文章

在马哥linux运维学院学习心得

题目:在马哥linux运维学院学习心得 姓名:谭龙 班级:M18 学号:26 时间:2016-02-29--2016-06-02(正常毕业时间预计在7月中上旬)   正文: 个人基本情况: 我是一名在校的即将毕业的大四学生,毕业时间为2016.7.专业为矿物加工工程专业,纯正的四川-广安人(邓小平故居就在那).因找不到工作,加上自己也不知道干什么,在堂弟的推荐下,来参加了马哥linux运维学院的学习:怀揣着一颗对计算机懵懂的心,开始涉足从未接触过了linux. 个人收获与心理变化: 在一开始接触

马哥Linux学习笔记之一

1.在执行脚本的时候可以用./或者. ./(点空格点斜杠)来执行脚本 ./ 表示启动了另一个Shell去执行脚本(另一个进程),所以点斜杠执行脚本时,设置的环境变量会随着进程的退出而结束,其中的环境变量设置对当前Shell不起作用. . ./相当于source ./执行脚本,source是执行脚本当中的命令,也就是说在当前进程中执行命令,所以其中的环境变量的设置会对当前Shell其作用. 2. 读取硬盘上的文件 读取硬盘上的文件先要将文件读取到内存上,再将其在内存上地址交给进程,这样进程就可以读

马哥Linux学习笔记之四——DNS

1.BIND:Berkeley Internet Name Domain DNS:Domian Name Service 域名解析 2. Http 3.PAM 插入式认证模块 4.SMTP/POP3/IMAP4:Mail Server 5.域名 www.baidu.com这是一个主机名(FQDN,Full Qualified Domain Name,完全限定域名),com是一个域名,baidu.com也是一个域名,域名是好多主机的集合. 域名解析起后面有一个数据库,解析就是一个查询的过程.域名解

马哥LINUX高薪LINUX高薪就业入门教程-虚拟机篇幅-学习笔记-11

课程名称:马哥Linux高薪就业入门-安装学习VMware Workstation9-1 课程主要内容:虚拟机安装及OS系统配置说明 虚拟机硬件配置: CPU,Memory,I/O(disk,Ethercard) 虚拟机关键字: 1.disk image file(磁盘映像文件) 2.Sparse(稀疏格式) 3.CPU超线程 虚拟机使用技巧: 1.虚拟机磁盘建议放置空间大,分区编号越小性能越好,对于不常用的文件就放到最外层的: 2.CPU一级缓存最高,二级缓存价格次之,一级缓存容量翻倍基本价格

马哥Linux学习笔记之五——邮件服务

1.SMTP只负责将邮件发送到服务器,其他的,像身份认证检测邮件,都不能完成.(25/tcp) ESMTP:Extended SMTP POP3:Post Office Protocol IMAP4:Internet Mail Access Protocol 2.Open Relay:开放式中继 就是人家的邮件从这个邮件服务器过,你都帮忙转发,这样就会成为产生垃圾邮件的根源.所以都要关闭Open Relay 3.SASL,Simple Authintication Secure Layer,简单

马哥Linux培训学习——编译安装Apache HTTP Server 2.4.10

目的:通过编译安装httpd, 掌握基于Linux环境下源代码编译安装程序的一般方法和步骤. 环境: 操作系统:CentOS 6.5 内核版本:2.6.32-431.el6.i686 软件版本:Apache HTTP Server 2.4.10 软件下载: 1.Apache HTTP Server 2.4.10 (httpd): http://apache.dataguru.cn//httpd/httpd-2.4.10.tar.bz2 2.Apache Portable Runtime 1.5.

马哥Linux学习笔记之三——加密

1.明文传输 ftp,http,smtp,telnet 2.机密性:plaintext-->转换规则-->ciphertext ciphertext-->转换规则-->plaintext 完整性:单项加密算法,提取数据特征码.输入一样,输出必然一样:雪崩效应,输入的微小改变,将会引起结果的巨大改变:无论原始数据是多少,结果大小都是相同的:不可逆,无法根据特征码还原原来的数据. 3.密钥 4.对称加密:有加密算法,有密钥 5.密钥交换算法 IKE(Internet Key Excha

马哥Linux学习笔记之二——网络

1.MAC(Media Access Control,介质访问控制) 是解决底层数据通信冲突的解决方案.因此,给每一个接入这样网络的主机一个id标示符,这个id标示符就叫做MAC地址. 2.CSMA/CD(Carrier Sense Multipath Access Collision Detection,载波侦听多路访问冲突检测),线型网络 以太网Ethernet最核心的标志. 3.Token-Ring(IBM)技术 环形网络解决冲突的方案.但是由于IBM的专利限制没能推广开来. 4.星形网络

【马哥linux学员学习笔记】MySQL多实例详解

本文作者系马哥linux学员云中鹤. 目录 一.基本概念 1.MySQL多实例 就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程.这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序,数据文件.在提供服务时候,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得相关硬件资源的多少. 2.应用场景 1).采用了数据伪分布式架构的原因,而项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例

【马哥linux学员学习笔记】zabbix实现微信报警

本文作者系马哥linux学员典韦. 一.注册微信公众号 首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的 申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号. 就可以看到用户数了,接下来的就要使用的用户的微信ID号了.点击用户查看用户的微信ID号.在浏览器查看用户的微信ID号.就是那个红色的ID了. https://mp.weixin.qq.com/cgi-bin/singlesendpage?t=mes