linux day28(shell语法与shell解释器,变量的定义与使用,变量作用域与环境变量,系统自带环境变量,变量补充,元字符)
一 shell介绍
shell(贝壳,反映的是一种封装的思想)
图灵(人工智能之父)
发明计算机,就是为了用来代替人力。
人类--------编程语言--------计算机
人--------语言----------计算机
机器语言-》汇编语言-》高级语言,难易程度,越开越简单。
应用程序
命令 echo 123 打印功能
shell解释器 (把系统接口进一步进行封装。)
系统接口 (把内核功能进行进一步的封装,封装一堆接口,如计算机的电源键,其次油门,背后其实有一系列复杂的运行。)
内核 (控制硬件的代码,计算机硬件核心功能,专门用来控制硬件的程序)
计算机硬件 (最终想控制的)
注:操作系统也是软件,只是太过于特殊,直接控制硬件,所以叫操作系统,shell解释器也是应用程序。
拓展:windows系统是开机,输入用户,立刻开启的是图形化界面,也是一个应用程序,而linux开启,输入用户后,进入的是shell解释器的窗口,这就是区别。原因就是用windows系统的是普通用户,图形化界面简单易操作,而linux系统,都是处在服务器端,只是负责把数据给客户端,用户真正接触的都是客户端,所以不需要,而且图形化界面吃资源,装在服务器上吃资源,所以服务器上的linux系统,开机,登录用户后,不是图形化界面,而是shell解释器,不是点点控制,而是输入命令控制服务器计算机。
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
这里最后的/bin/bash,就是开机登录用户root后,默认进入shell解释器窗口的原因所在。
shell解释器,只是一种统称,而bash是shell解释器具体的一种,是c语言写出来的。
在bash窗口,再输入一个bash,就是子进程。这时候exit,就是退出了子进程,再exit就把整个bash进程给退出。
shell优点:操作硬件更简单,专业人员使用。
二,运行shell程序的俩种方式
1,交互式环境:
优点:敲一条就立刻执行
缺点:不能永久保存命令,需要重复执行命令时或多个命令时,就会很繁琐。
2,把shell命令写入文件中,该文件称之为脚本文件(一般就写入一个文件中,功能较少,虽然简单功能少,但是也是一个软件,比如写一个网卡配置脚本,就是把网卡配置命令写入一个文件中,就叫网卡配置脚本。)
如:vim nginx_install.txt
echo 111
echo 222 wq保存退出。里面代码永久保存了,
bash nginx_install.txt(bash + 文件路径) 这样就可以执行里面的代码而不是进入交互式环境,可以一起执行,不用一条一条敲,同时还可以永久保存,方便同意的执行。
bash nginx_install.txt(运行shell脚本)背后一共经历三个阶段,
1,首先是bash启动起来,进入到内存,。
2,然后把nginx_install.txt读入内存,
3,bash解释器,会去解释该文件的内容,把文件内容当成命令,解释一行执行一行,也就是识别语法。
注:shell可能指的是shell解释器,也可能指shell这门语言。
chmod +x nginx_install.txt
./nginx_install.txt 开启一个子shell来运行程序
如果想在当前的shell运行。
. nginx_install.txt
那么在当前运行这个程序,和在子shell里运行这个程序区别在哪?
区别在于:
三,变量
1,什么是变量
量:记录下的事物的状态
变:事物的状态时可以发生变化的
变量:其实是一种存取内存的机制。
程序的核心,就是数据和功能代码,一个程序的运行,其实就是一系列状态在发送变化,也就是一系列变量在发生变化。
一个程序如何组成,其实就是用变量把数据存起来,以后再把这个变量进行增删改查,所有程序都是这个样子。
2,为何要用变量
为了让计算机能够像人一样记下事物的状态,记不是目的,目的是为了以后取出来用, 并且事物的状态可以改变的
注:运维的三大职责,1,软件7*365*24不间断运行,做好监控防患于未然。2,对软件做好优化。3,备份数据。
3,如何用变量
原则:先定义,后引用
定义:ip="1.1.1.1" 字符串
name="egon"
age=18 整数
salary=3.3 小数
引用:echo $ip ping $ip , ssh root@$ip 等等
就会显示出1.1.1.1
$符号代表取变量名的值。$ip 代表取ip变量名对应的变量值,而echo,就是要打印出来。
删除:unset name
注意:还可以把一个常用的文件定义成一个变量,用起来简单。
注:如果重复给一个变量名赋值,就会覆盖原有的变量值。
注:变量值,只要不是整型,不是浮点型,就加上双引号。
echo ${} 的使用 定义: salary=3.3 引用 echo ${salary}rmb 得:3.3rmb
变量3种类型:字符串,整数,小数
四,引号对变量的影响
"":软引用,引号符号有特殊意义
'':硬引用,引号所有符号均无特殊意义
name="egon" 定义
echo "hello $name" 双引号里,保留了特殊符号的意义。
hello egon
echo 'hello $name' 单引号里,会除去里面的特殊意义。
hello $name
``:取命令的运行结果,()括号和反引号功能一模一样。
date +%F 2021-04-09
x=`date +F` 将2020-04-09赋值给了x
touch ${x}.txt 建立了一个 2021-04-09的文件
y=$(date +F)
touch ${y}.bak 建立了一个2021-04-09的文件
五,变量作用域与环境变量设置
每启动一个进程,操作系统就会在内存中给它划一块专属的内存空间,所以内存和内存空间是相互隔离的。开启虚拟机,登录后,指定一个变量x=10,然后再进入一次bash,一个子进程,而子进程是看不见x的值,这就是变量的作用域导致的原因,这时候在最开始的bash里,输入export x 就可以让它下面的所有子bash进程都看到x的值,属于一个递进继承。但是如果换一个联机终端,就看不到x的值。
如果想让所有在这个系统上登录的人,一登录,就可以看到x的值,就需要把x=10 export x 写到每次开机都会立刻启动的文件中,/etc/profile/每次登录进去,都会启动,所以写到这个文件的最后一行,如果写前面,万一后面有x=其他,就会把我的赋值覆盖,所以写到最后一行。
env查看系统当中所有的环境变量。
set查看当前系统中所有的非环境变量。
系统自带的环境变量:
shostname 主机名,pa1 默认的命令提示符,
命令检索的优先级,命令首先会在当前文件夹里去找,如果没有,就去环境变量path里找。
六,元字符(是被shell解释器解释)
如果设计到命令层层嵌套的情况下,``反引号,无法使用。
如,res=`ls `pwd`` 这样就会出错
所以,可以用$(),如:res=$(ls`pwd`)或者全部用$(),如:res=(ls(pwd))
拓展:做运维的不要随便用rm,要先备份。
~,当前用户的家目录
. ,当前目录
.. ,上级目录
!,可以和find和中括号内加入!,代表取反,^号和!一样
#,注释,加到文件里,可以注释命令,也可以放代码上面或者后面,进行注解说明。
$,取变量值
拓展:expr运算
expr 只支持整数的加减乘除,没有小数,答案也不支持小数。
拓展:bc运算
拓展:获取内存使用率
free查看内存使用信息。
拓展:let age++
首先,unset y ,unset x 删除这个变量名,
let x++ 没有x这个变量,就默认为0,所以现在得到1
let ++x 也是1
但是它们在别的编程语言是有区别的。
let x++ 是把x的值先赋值给要赋值的,再加1
let ++x 是先计算,后赋值