1. shell介绍

1.1脚本

脚本就是将命令堆砌到一个文件,执行文件达到批量执行命令的目的
例如:
编辑一个aaa文件,—vim aaa
内容为: hostname pwd mkdir/tmp/test
最后执行改aaa文件--------./aaa(点+/)
为了保证脚本的健壮性,同时保证脚本执行的结果的准确性,引入脚本语言
脚本语言:shell(.sh)-----shell语法+命令=shell脚本 -----容易
perl(.pl) — perl语法+命令=perl脚本
python (.py) python语法+命令=python脚本-----难
三种脚本语言:都可以用于在Linux中编写脚本
Shell编程-----》》shell脚本

1.2shell的含义

1.shell的含义:
1)shell被称为命令解释器-----将命令进行解释执行。
—Unix/Unix-like操作系统—都存在shell
—RHEL/CentOS操作系统—叫做bash----,
2)程序涉及语言:
作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
Shell—脚本语言—shell语法—编写脚本
Shell语法最终是被bash解析的
1.2.1shell的分类-----针对命令解释器的分类
1.shell的分类
1)图形界面shell(Graphical User Interface shell)-----GUI shell
例如:GNOME KDE
在这里插入图片描述

  1. 命令行式shell(Command Line Interfac shell)-----CLI shell
    例如:bash、sh 、ksh、 csh 、(Unix/Linux系统)

1.3shell的种类

1.Bourne shell sh ------Bourne是shell的作者
2.C shell csh
3.Korn shell ksh
4.Bourne Again shell Bash
5.POSIX shell

1.4各主要操作系统下缺省的shell

缺省的意思是默认-----unix/unik-like
1.AIX系统默认是Korn shell-----IBM
2.Solaris系统默认是Bourne shell —SUN
3.FreeBSD系统默认是C shell -----免费
4.HP-UX 系统默认是POSIX shell----hp
5.LINUX默认是Bourne Again shell-------x86平台

1.5程序语言

语言是用来开发程序的,而程序运行当中是需要变量来保存中间数据
变量----variable -----变化的量----变量往往在程序中用于保存中间结果
常量-------》不变化的量
变量用于存放数据,变量具有不同的数据类型----
例如: 数值,字符串,字符
变量分为:强类型 C++ -----C语言的变量都要提前声明变量的类型,才能操作
例如 定义a为整型 int a a=12
弱类型 shell------而shell里用指定类型,可以直接使用
例如 a=123 a=aaa
变量仅存在于内存空间,和硬盘没有关系

1.6编程语言

1.6.1.程序设计语言分为2类:

1 编译型语言(静态语言)
1)----c/c++(先编译在执行),java(预编译)
2)—事先需要编译后才能执行程序的,整个程序完全都是源代码
3)—对于编译型语言,变量必须定义好,必须指定变量类型,才能解析,而编译器正是根据变量的类型来对变量的存储进行优化和判定的,违反了变量类型,是不允许编译后者执行的原则
4)—对编译型语言而言,大多数的变量类型都称为强类型变量(变量必须要有类型)
5)执行顺序:源代码—编译(gcc)—链接(函数库,lib)----生产可以执行文件----执行
5)开发周期:
A.源程序
B.编译(词法分析,语法分析,句法分析,代码检查和代码优化等一系列的操作)
C.链接(会调用系统上提供的库)
D.执行(链接完成后就是一个独立的二进制可以执行文件了,直接执行即可)
2 解释型语言(动态语言)
1)----需要解释器解释执行,依赖于解释器,解释器本身就是二进制执行文件(bash)
2)----bash(严重弱类型),perl,python(语法简洁优美,严格规范),php(适合网页开发
3)----对于解释型语言,变量通常都是弱类型
4)----如果不加类型的话,并不是说计算机知道该如何存储,而是我们的解释器----一律将变量解释为字符型
5)-----默认识别类型为字符型
6)源代码----解释(解释器,shell)----执行
7)开发周期:
源代码解释成机器码—边解释,边执行
补充:Oracle数据是由c+java组成的
MySQL数据库是由c/c++
Linux操作系统是由c/c++

1.6.2 程序设计语言的区别:

1编译型语言执行效率高,解释性语言执行效率低
2编译型语言—将源代码编译成机器码----执行
解释型语言—源代码解释成机器码-----边解释,边执行
3编译型语言的变量是强类型(需要声明),而解释型语言的变量是弱类型(不用声明,默认字符)
4.编译型开发周期复杂,运行效率高
5.解释型易于维护

1.7计算机保存数据的方法

数据:一种是数值,一种是字符 数值: 123 123.1 字符 a ,b
1.变量存放数据:存放数据不同,变量类型不同
例如: 123 整数 Interger – int 整数类型(整型)----整数
1.1 1.12 小数 Float /double 浮点型-----小数
float(单精度浮点型) double(双精度浮点型)
aa lisi 字符串 char 字符型 string 字符串型
2.字符串如何保存----》lisi
ASCII—美国信息交换标准代码—ASCII编码表
在这里插入图片描述

ASCII编码表-----用二进制数字表示字符—
最开始用7位二进制数表示一个字符0000000(0)到 1111111(127)扩展表
现在ascii编码表用一个8位的连续二进制表示1个字符。一个字符占用一字节空间。
例如:要存放h这个字符----对应的十进制104----对应二进制01101000
01101000----占用1字节表示h这个字符
如何在键盘上打出对于的ASCII表字符: 在有小键盘的前提下+ALT+对应数字
总结:ASCII编码中包含英文字母字符,数字字符,英文标点字符的编码
3.当数据不知道是数值还是字符的情况下,如何保存数据?
例如: 123 (不知道是数字还是字符串的前提下)
1)当字符串保存----字符
123—》对应ASCII中的49,50,51—转换为二进制数为
49—》01001001 50---- 01010000 51---- 01010001
共计占用3B的空间
2)当数字整型保存—数值-----》表示为 01111011 —占用1B的空间
3)因此用解释型语言存放数据的时候就是占用3B的空间,按字符处理
4.各国语言的字符怎么存放?
1)中国对中文字符(简体)进行编码,就衍生出编码表/字符集—GB2312字符集
GB2312字符集里有7千+汉字,—用2字节保存一个字符
GBK字符集----2W+汉字-----用2字节保存一个字符
2) 乱码的概念:编码字符集和解码字符集不是一样的就会出现乱码
在这里插入图片描述

3)计算机解析的是二进制数据,能往网络里传输的是数据都是二进制数据,能在硬盘存储的数据也是二进制数据
4)Linux系统里用UTF-8字符集
5)为了解决不同国家不同编码的产生的乱码—出现了统一字符集Unicode(联合国码)
只要使用同一的字符集编码和解码,就不会出现乱码的情况
Unicode字符集-----一个中文字符 ===2字节空间
Unicode字符集-----一个英文字符 ===2字节空间
6)现在统一使用的是UTF-8字符集,
英文字符1字节空间 欧洲字符2字节空间 亚洲字符3字节空间
7)总结:一个字符用几个字节,取决于用的什么字符集,

1.8变量的生命周期

C语言这类的,需要手动释放内存 , JAVA这类的,需要自动释放内存

1.9Bash相关知识

Bash实际是解释型语言,是弱类型的,对变量类型要求不高,但是,作为一个高级使用者来说,我们还是应该明白内部是如何来处理这些数据的。
相关命令:
Man Bash----查看bash命令详细帮助
在这里插入图片描述

1.9.1.bash变量类别

Bash变量类别:是指作用范围而不是变量类型的
1.本地变量
本地变量作用范围仅限于当前源程序文件—当前shell------当前脚本生效
对shell来讲,仅对当前shell进程生效,对子进程或者其他shell无效
子shell:在一个进程中,又打开一个新的shell----如何进入另一子进程—bash+回车
在这里插入图片描述

2.环境变量(系统变量)
环境变量作用范围: 当前shell及其子shell----当前脚本生效
1)声明环境变量
语句 declare -x 变量名=变量值
在这里插入图片描述

2)设置环境变量
A.将本地变量导出为环境变量
先定义变量名=变量值-----在使用export 变量名—导出为环境变量
在这里插入图片描述

B.source 配置文件 —让修改后的配置信息立即生效
编辑vim /etc/profile—全局配置文件
在这里插入图片描述

添加— 自己定义 一个环境变量
变量名(大写_大写)=路径 --------Export 变量名
在这里插入图片描述

重启生效reboot/或者执行 source /etc/profile 立即生效
在这里插入图片描述

3)当出现命令没找到的情况下----如何解决问题—
环境变量 主要是操作系统使用的-------例如PATH环境变量
[root@localhost ~]# echo $PATH
/usr/lib64/qt-3.3/bin: /usr/local/sbin: /usr/local/bin: /sbin: /bin: /usr/sbin: /usr/bin: /root/bin
在这里插入图片描述

a)方法1:检查软件是否安装—软件安装了才有命令文件
b)方法2:查看PATH环境变量------前提软件安装了但是没有找到命令(与PATH有关)
例如:nginx命令 就没有找到,但是软件都以安装
在这里插入图片描述

我们可以查看PATH环境变量中保存的路径,因为PARH环境变量中保存的就是Linux中寻找命令文件的路径.
c)如何将命令文件存放到PATH已知的路径中:
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin(PATH中的已知路径)
cp -r /usr/local/nginx/sbin/nginx /usr/local/sbin
d)将命令文件所在的路径加入PATH 环境变量
Export PATH=$PATH:/usr/local/nginx/sbin ------- (添加命令文件到PATH)
在这里插入图片描述

以上2种方式都只针对当前窗口生效,一旦重新启动窗口,就会无效,因为变量仅在shell中存活,一旦离开shell就会失效。
e)如何永久生效?------需要修改配置文件---- .bash_profile-----局部配置文件
我们为了方便使用某些命令,将命令文件的所在路径添加到PATH中,使其成为环境变量,就可以全局使用。
在路径是/root下使用ls -a -------》可以查看所有文件(包括带.的文件)
.bashrc -----》编写本地变量,别名 .bash_profile-----》编写环境变量
如何执行这2个配置文件: ~/.bashrc ~/…bash_profile
在这里插入图片描述

修改配置文件---- .bash_profile(存放环境变量),想要命令文件永久生效,添加命令路径即可。
在这里插入图片描述在这里插入图片描述

对.bashrc和.bash_profile文件的修改不会立即生效.需要重启当前会话窗口,或者执行source .bash_profile /. .bash_profile
在这里插入图片描述在这里插入图片描述

4)常用的环境变量
有: USER PWD LANG PATH
在这里插入图片描述

5)查看环境变量(env,printenv,export,set)
使用命令env(Environment)
在这里插入图片描述

使用printenv命令
在这里插入图片描述

使用export
在这里插入图片描述

使用set
在这里插入图片描述

3.其他环境变量(PS1—PS4)

  1. PS1:定义当前命令提示符
    可以使用一些内置的宏来定义
    \h ------显示主机名第一个.之前的内容
    \H -----完整主机名
    \W -------相对路径 #basename dir_name
    \w ------绝对路径
    $ -------uid=0–#,非零为$
    在这里插入图片描述

可修改成其他的命令提示符:----配合使用export +PS1=’[ 内容 ]$’
在这里插入图片描述在这里插入图片描述

  1. PS2:定义续航符的格式 ---->
    输入重定向 < <<
    续航符在命令文件比较长的情况使用,一行内容放不下, ,就可以使用续航符,让其语句在下一行显示,但是没有换行功能,并且是一个整体的命令
    命令1++按下回车键—自动出来续航符 最后一条语句直接回车就可以执行命令了
    在这里插入图片描述

+回车–取消回车键执行功能,仅作为换行符使用,在命令行中换行操作
3) PS3: 一般不常用
4) PS4:定义脚本测试符的格式 ----bash -x 脚本名
bash -x 脚本名 —标记脚本中的命令PS4变量的值,标记所有命令
可以在脚本中添加set -X /set +X 来表示标记的区间
如果追踪命令执行的话,会在命令之前显示+,调试脚本会用到.
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

4.特殊变量(不常用)

  1. 特殊变量
    变量名:?(问号) 变量值:命令执行状态返回值 命令执行状态:有成功和失败
    我们通过命令的执行结果来判断命令的执行状态.
    当Linux操作系统执行命令时: 屏幕上会打印执行结果,执行状态会保存在?中
    而?的状态有2种(0表示命令执行成功,非0表示命令执行失败)
    失败了,1-255之间的值都为不同的失败,一般来讲1,2,127系统留用
    在这里插入图片描述

1.9.2赋值表达式

1).赋值表达式:变量名=value—将变量值保存在变量名中,可以通过变量名调用变量值
变量名=” value ” 可以用双引号 变量名=’ value ’ 可以用单引号
在这里插入图片描述

A为变量名 =为赋值操作 123为变量值
错误书写:赋值表达式不能加空格----解释器会认为命令
在这里插入图片描述

1.9.3.变量名的注意事项

1)变量名只能包含字母,数字,下划线三类字符,不能以数字开头,或者全部都是数字为变量为变量名
注意:不建议自己使用的变量名使用大写形式,可能会有系统环境变量发生冲突,因此可以使用大小写的变量名,但是无论如何应使用风格一样的变量命令
在这里插入图片描述

2)数字开头报错
在这里插入图片描述

3)下划线开头不报错
在这里插入图片描述

4)推荐使用的起变量名的方式
a)使用下划线和字母
在这里插入图片描述

b)字母大小写搭配----驼峰法
在这里插入图片描述

5)选择变量名:
a)有意义,方便引用
b)易读性----采用下划线分隔my_name_is,或者驼峰法(NetworkMangaer)

1.9.4.查看变量值—命令echo

  1. 查看变量值----命令ehco:
    A)echo命令:----回显,回声
    基本语法1: echo + + 变 量 值 − − − − − +{变量值}----- +{ }----变量替换

Ehco + + 变 量 值 − − − − − − − − − +变量值--------- +-----${ }意思一样
在这里插入图片描述

练习:
在这里插入图片描述

基本语法2: echo -e +”变量值1 \t 变量值2”
功能描述:添加-e使后面的反斜杠定义的字符生效, \t表示制表符,等同于\tab
练习:
在这里插入图片描述

基本语法3: echo -e +”变量值1 \n变量值2”
功能描述: 添加-e使后面的反斜杠定义的字符生效,\n表示换行,等同于回车键
练习:
在这里插入图片描述

基本语法4: echo -n +”变量值”
功能描述: 取消默认的换行符
练习:
在这里插入图片描述

基本语法5: echo -e +”\e[数字;数字;数字m+变量值\e[0m”
\e[定义字体粗细:定义字体颜色+m+变量值\e[0m
定义字体粗细:1(加粗),2(细),3(细),4(加下划线),5(闪烁字体),如果同时使用要用;(分号)隔开
定义字体颜色:默认是黑色字体,数字从30开始写,用分号;
定义字体背景色:默认从40开始写, 用分号;
\e[0m:表示只对当前变量值由效果,不影响下一行的效果
功能描述: 定义输出格式
练习:定义字体粗细 1—,2----3—,4,----5
在这里插入图片描述

练习:定义字体格式一起使用:
在这里插入图片描述

练习:定义颜色
在这里插入图片描述

练习:定义字体背景色
在这里插入图片描述

基本用法6:配合标准管道读入新的密码
echo “新密码”|passwd --stdin 用户名
在这里插入图片描述

1.9.5变量的声明和赋值

1).编译型语言中,必须先声明变量类型,然后才能赋值
A变量初始化(声明+赋值) ----Int a=123
B变量的声明和赋值----分开写-----int a(声明) a=123 (变量赋值)
2).在解释型语言中,shell不用声明变量类型,直接可以赋值
a=123----变量赋值----默认以字符串处理
3).声明命令: declare-----内部命令,用来声明变量,并可以指定变量类型
基本语法: declare +选项
-i //声明为整型
-a //声明为数组
-r //声明变量为只读
-x //声明环境变量
在这里插入图片描述
在这里插入图片描述

1.9.6.变量的引用值$

1). $abc //引用变量
2)规范做法是:
${abc} //花括号在有时候是可以省略的
3)练习:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1.9.7.撤销变量命令

1).定义的变量只在当前窗口生效,换到其他窗口,或者关闭窗口就都会失效
2).使用命令unset
基本语法: unset 变量名
在这里插入图片描述

4)只读变量不能撤销,直到把当前窗口退出exit, 在这里插入图片描述

1.9.8.bash配置类型

1.全局
/etc/profile /etc/profile.d/* /etc/bashrc
其实都是bash这个程序启动的时候会读取配置信息的文件
无论现在什么样的应用程序,大多数都需要用配置文件来保存用户可以进行的设定的
2.用户个人:
~/.bash_profile ~/.bashrc
我们对bash所做的任何设定,都可以将这些修改写入到这些文件中,但是这些文件还略有不同
并不是每一次bash的执行都会读取每一个bash配置文件的,这要取决于用户启动bash的启动方式(用户登陆,执行脚本)

1.9.9.总结

•变量是在内存中工作的,那当关机或者进程结束,这些变量不会存在?
•一旦exit或者logout,(退出进程)则变量就消失了
•每一个变量的生命周期,最长期限是跟当前进程相关的,进程结束,保存的变量就消失了,就算再登陆一次.他跟此前的进程也不再是同一个了
在这里插入图片描述

1.10Shell中的引号设置

1.10.1双引号

“ ”------双引号----弱引用-----会发生变量替换
例如: a =” my name”
在这里插入图片描述

1.10.2单引号

‘ ‘-----单引号----强引号----不会发生变量替换
例如: a =’my name’
在这里插入图片描述

总结:在没有变量引用的前提情况下,双引号” ”和单引号’ ’没有任何区别
如果在有变量引用的前提下,双引号会替换 里 的 内 容 , 是 弱 引 用 , 而 单 引 号 不 会 替 换 里的内容,是弱引用,而单引号不会替换 ,,里的内容,是强引用

1.10.3反引号

------反引号------命令替换,等同于$()
$( ) ===== --------命令替换
例如: rpm -qf which passwd —实际上:rpm -qf /usr/bin/passwd
可以用来配合定义以时间命名的文件
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值