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 是先计算,后赋值

 

posted @ 2021-04-09 21:41  sagelasi  阅读(80)  评论(0编辑  收藏  举报