百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

科普 | Shell中傻傻分不清楚的TOP3

liuian 2024-11-28 00:50 115 浏览

文章来源:https://mp.weixin.qq.com/s/UofKYTb9hp2FXYIKM5Q3Qw

原文作者:Monica2333


近来小姐姐又犯憨憨错误,问组内小伙伴export命令不会持久化环境变量吗?反正我是问出口了。。然后小伙伴就甩给了我一个《The Linux Command Line》PDF链接。感谢老大不杀之恩~

Shell是命令解释器,它会接受用户输入的各种命令,并传递给操作系统执行。它的作用类似于Windows系统的命令行。在UNIX或Linux系统中,Shell即是用户交互的界面,也是控制系统的脚本语言。当然现在用户也可以选择图形化界面做一些和操作系统的交互。层次示意图如下:

对于初学者来说,可能搞不清楚Shell怎么会有那么多分类,Shell的语法怎么那么随便...

小姐姐结合自己初学Shell傻傻分不清的问题点,主要从Shell的种类,变量的分类,条件测试的表达三个部分来介绍。

Shell的种类


shell程序有shbash,zsh等分类,我从网上找到一张图可以看出shell程序的发展史。


对于这些Shell程序,其语法或多或少有一些差异,不过我们通常使用的都是bash。

Shell程序信息

在Linux系统我们可以通过一些命令查看或修改当前Shell程序信息。

一般发行版的Linux系统中,默认的shell程序就是bash。我们在写shell脚本时,通常也会在脚本文件头部指定bash作为脚本解释器。

这里多说一句,zsh有时也作为猿媛们的默认shell。zsh语法大多是和bash匹配的,也不会影响shell脚本的执行(因为脚本头部指定bash就还是bash:),也不会影响像小姐姐这样的渣渣使用。用它是因为它有神奇的开源框架 Oh My God.. 哦不,是 Oh My Zsh !!!

后面的内容我们还是以Linux系统中的bash为例来介绍:)

变量的分类


Shell是一门动态类型语言和弱类型语言,我们可以把变量理解为KV对,key是变量名,value是变量值。变量大体可以分为环境变量,系统变量,用户定义的变量三类。

环境变量

比如我们经常配置的JAVA_HOME就属于环境变量,这些变量是所有Shell程序运行时都可以使用的变量。关于环境变量的操作命令举例如下:


使用export命令定义的环境变量只在当前运行的shell进程中有效,结束进程就没了。所以我们要将配置变量定义在令小姐姐懵逼的一系列配置文件中,持久化下来。

说起配置文件,又不得不先提下shell程序和用户的Interactive和Login模式:)

  • Interactive & Non-Interactive

Interactive通常是指读入写出数据都是从用户的terminal,也就是我们平时用命令行打开终端就是Interactive模式,而执行一个shell脚本就是Non-interactive模式。怎么检验当前shell运行的模式是不是Interactive呢?小姐姐从GNU网站拷贝了一段脚本:

case "$-" in
*i*)	echo This shell is interactive ;;
*)	echo This shell is not interactive ;;
esac

结果如上所述。

  • Login & Non-Login

Login模式指的是用户成功登录后开启的shell进程,这时候会读取/etc/passwd下用户所属的shell去执行。

Non-login模式指的是非登录用户状态下开启的shell进程,我们可以通过echo $0区分。

扯这么多是因为配置文件的加载顺序和shell进程是否运行在Interactive和Login模式有关系:D

  • 配置文件加载顺序

这是阿姨从网上粘的图。bash支持的配置文件有/etc/profile,~/.bashrc等。

当调用一个Interactive&Login模式的shell进程时,配置文件的加载顺序为:

/etc/profile —>( ~/.bash_profile, ~/.bash_login, ~/.profile)其中之一—>~/.bash_loginout(退出shell时调用)

当调用一个Interactive&non-Login模式的shell进程时,配置文件的加载顺序为:

/etc/bash.bashrc —>~/.bashrc

当调用一个non-nteractive模式的shell进程时,通常是执行脚本时,此时配置项是从环境变量中读取和执行的,也就是env命令输出的配置项。

另外,在开启一个shell进程中,有一些参数的值也会影响到配置文件的加载。如--rcfile,--norc等。这些参数的含义值可以使用man bash进一步了解。只要保持默认值,其实就是我们上面介绍的配置文件加载顺序。

还有,在发行版的Linux系统中,Interactive&Login模式下的~/.bash_profile, ~/.bash_login, ~/.profile并不一定是三选一,看一下这三个脚本的内容会发现他们会继续调用下一个它想调用的配置文件,这样就可以避免配置项可能需要在不同的配置文件多次配置的弊端了。如centos7.2 中 ~/.bash_profile文件中实际调用了 ~/.bashrc文件。

按照模式和参数设置启动的shell程序的配置文件加载流程图如下:

好了,到目前我们总算把环境变量中配置文件的加载顺序理清了。下面列举一些常用的Shell环境变量吧。

系统变量

Shell中系统变量主要在对参数判断和命令返回值判断时使用,包括脚本和函数的参数和返回值判断。没啥可说的,主要难记且脚本中经常出现:

用户自定义的变量

是指我们在使用命令或脚本时定义的变量,因为shell是弱类型语言且语法XX,这里主要谈谈初学时的几个坑爹点:

  • “=” 左右两边不能有空格

你懂我说的意思了吧。。

  • 引用

所谓引用,指的是将字符串用引用符号包括起来,以防止其中的特殊符号被Shell解释为其他涵义。

常用的引用符号如下:

  • $
  • 前面我们其实一直在用“$变量名来表示某个变量名的值,这其实也正是$的作用。

    • Shell中变量名的大小写是敏感的

    好了就这么多吧。

    条件测试的表达


    Shell脚本中除了变量,还经常出现的语法就是条件测试的判断。不会写脚本的开发小姐姐不是好运维,我们来一起侃侃吧。

    基本语法

    在Shell程序中,当指定的条件为真时,整个条件测试的返回值为 0;反之,如果指定的条件为假时,整个条件测试的返回值为 非0。

    条件测试表达式的书写有test expression 和 [ expression ]两种形式,注意后者的空格一定不能省!!

    脚本中经常出现的有字符串测试、数字测试、文件测试、逻辑操作符测试。我们一起看下:)

    字符串测试

    注意:这里运算符 左右两边又一定要有空格了(下同),这样shell才能将之当成命令执行。

    数字测试
    文件测试
    逻辑操作符测试

    对了,在这里说一下,我目前是在职Java开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01。获取。我这里有最新的Java基础全套视频教程。

    相关推荐

    手机u盘有必要买吗(手机u盘需要什么软件)

    网上卖的手机U盘大都是各地的实体数码店进行发货和销售的。他们采用的U盘质量和工厂生产的质量是一致的。并没有什么区别对待。而且由于网上销售费用比较低,所以他在售卖比实体数码店售卖的价格更低,所以这种手机...

    电脑系统怎么下载到u盘中(电脑系统win7纯净版下载官方免费版最新版)

    下载电脑系统,可以到电脑系统资源下载网站,找到下载页面的下载点,右击下载点,选择迅雷下载,可以把系统文件下载到硬盘里,然后插上U盘,将下载好的系统文件复制到U盘。另一种方法是,将迅雷软件的默认下载路径...

    小米主题安装器(红米主题商店app下载安装)

    很抱歉,一加九手机无法直接安装小米主题。因为一加九和小米手机使用的是不同的操作系统和主题引擎,它们之间不兼容。一加九使用的是基于Android的OxygenOS操作系统,而小米手机使用的是基于Andr...

    hp电脑恢复出厂系统(hp电脑恢复出厂系统操作)

      在开始菜单的【设置】中找到【重置此电脑】的选项即可开始重置恢复到出厂设置;如果您需要整个硬盘格式化,可以选择其中的【删除所有文件】的选项,等待系统设置完成之后会重新进入新系统设置。以下是详细介绍:...

    ghost做c盘镜像的步骤(ghost制作镜像步骤)

    共9个步骤:1、一般GHOST工具是在PE启动后使用,这个就是PE中GHOST所在路径,找到这个软件并运行。2、界面是英文版本的,因为软件的易操作易学习性,所以这个软件基本没有中文版版本,然后在弹出的...

    win10家庭版怎么激活系统(win10家庭版激活步骤)

    win10家庭中文版怎么激活1.在win10系统桌面上,点击左下角的开始按钮选择设置选项进入。2.进入设置列表菜单,点击更新和安全选项进入。3.点击激活选项继续下一步操作。4.在弹出输入产品密钥的对话...

    office2010和2016区别(office2010和2016差别大不大)

    一、指代不同1、word2010:Word2010是Microsoft公司开发的Office2010办公组件之一,主要用于文字处理工作。2、word2016::Word2016是Microsoft公司...

    在电脑上怎么截图(在电脑上怎么截图保存到桌面)
    • 在电脑上怎么截图(在电脑上怎么截图保存到桌面)
    • 在电脑上怎么截图(在电脑上怎么截图保存到桌面)
    • 在电脑上怎么截图(在电脑上怎么截图保存到桌面)
    • 在电脑上怎么截图(在电脑上怎么截图保存到桌面)
    win10官网下载教程(windows官网下载win10)

    步骤1首先打开360安全浏览器步骤2在搜索框中输入“微软官网”,点击“搜索”按钮步骤3点击进入微软官网步骤4下滑界面,在下方可以看到可以下载的系统,此处以windows10企业版下载为例,点击这个版本...

    恢复帝app下载(恢复帝app官方)

    微信删除好友一般是不能恢复的,有时候在网上会看到一些关于微信删除好友可以帮助恢复的黑客,大多数都是骗人的,因此,再着急恢复好友也需要理智、谨防上当受骗。1.电源:首先确认摄像头通电是否正常状态,指示灯...

    系统之家下载安装(系统之家安装版)

    是靠谱的。系统之家(HomeSystem)广义上包含了电脑系统安装和手机系统安装,在之前手机软件还不是很普及的时候一般特指电脑系统安装,可如今手机用户大量的出现,安卓系统可以说超过Windows系统...

    win10正版系统官网原版纯净版老电脑

    一,纯净版Win10系统是根据正版系统制作的,没有夹杂其它软件和驱动,和正版系统一样安装完后需要打各种驱动和根据安装常用软件。二,本质上纯净版Win10也是盗版系统,这是和正版系统最大的区别,而且可能...

    十大最好用的浏览器(市面上最好用的浏览器)

    1、谷歌chrone  谷歌美国Google公司开发的一款浏览器,谷歌浏览器的特点就是界面简洁,速度快不卡顿,内容全面,你想要找到内容上面都有,就是在安装插件的方面会比较麻烦,不过看在它那么好用的份...

    ipad充不上电了怎么办(ipad充不上电怎么办但显示在充电)

     原因和解决办法: 1、ipad充不进去电很可能是充电线的原因,假如大家在给ipad充电的时候以前经常有过接触不良的情况,那么,你就需要考虑更换充电线了。  2、第二,就是接口问题了,或者说是充电...

    怎样取消开机启动项目(如何取消开机启动程序)

    在Windows操作系统中,有一些程序或服务可能会在计算机启动时自动运行,这些程序或服务也被称为开机启动项。如果您希望在启动Windows时减少计算机运行的程序或服务数量,您可以关闭一些开机启...