Shell中傻傻分不清楚的TOP3

Shell中傻傻分不清楚的TOP3
公布文章
Shell中傻傻分不清楚的TOP3

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

Shell是下令注释器,它会接受用户输入的种种下令,并传递给操作系统执行。它的作用类似于Windows系统的下令行。在UNIX或Linux系统中,Shell即是用户交互的界面,也是控制系统的剧本语言。固然现在用户也可以选择图形化界面做一些和操作系统的交互。条理示意图如下:
Shell中傻傻分不清楚的TOP3

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

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

Shell的种类

shell程序有shbash,zsh等分类,我从网上找到一张图可以看出shell程序的发展史。
Shell中傻傻分不清楚的TOP3
对于这些Shell程序,其语法或多或少有一些差异,不外我们通常使用的都是bash。

  • Shell程序信息

在Linux系统我们可以通过一些下令查看或修改当前Shell程序信息。
Shell中傻傻分不清楚的TOP3

一样平常发行版的Linux系统中,默认的shell程序就是bash。我们在写shell剧本时,通常也会在剧本文件头部指定bash作为剧本注释器。
Shell中傻傻分不清楚的TOP3

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

后面的内容我们照样以Linux系统中的bash为例来先容:)

变量的分类

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

  • 环境变量

好比我们经常设置的JAVA_HOME就属于环境变量,这些变量是所有Shell程序运行时都可以使用的变量。关于环境变量的操作下令举例如下:
Shell中傻傻分不清楚的TOP3
Shell中傻傻分不清楚的TOP3

使用export下令界说的环境变量只在当前运行的shell历程中有用,竣事历程就没了。以是我们要将设置变量界说在令小姐姐懵逼的一系列设置文件中,持久化下来。

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

  • Interactive & Non-Interactive`

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

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

效果如上所述。

  • Login & Non-Login`

Login模式指的是用户乐成登录后开启的shell历程,这时候会读取/etc/passwd下用户所属的shell去执行。
Shell中傻傻分不清楚的TOP3
Non-login模式指的是非登录用户状态下开启的shell历程,我们可以通过echo $0区分。

Shell中傻傻分不清楚的TOP3

扯这么多是由于设置文件的加载顺序和shell历程是否运行在Interactive和Login模式有关系:D

Shell中傻傻分不清楚的TOP3
这是阿姨从网上粘的图。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中傻傻分不清楚的TOP3
根据模式和参数设置启动的shell程序的设置文件加载流程图如下:

Shell中傻傻分不清楚的TOP3

好了,到现在我们总算把环境变量中设置文件的加载顺序理清了。下面枚举一些常用的Shell环境变量吧。
Shell中傻傻分不清楚的TOP3

  • 系统变量
    Shell中系统变量主要在对参数判断和下令返回值判断时使用,包罗剧本和函数的参数和返回值判断。没啥可说的,主要难记且剧本中经常出现:
    Shell中傻傻分不清楚的TOP3

  • 用户自界说的变量
    是指我们在使用下令或剧本时界说的变量,由于shell是弱类型语言且语法XX,这里主要谈谈初学时的几个坑爹点:

  • “=” 左右双方不能有空格
    Shell中傻傻分不清楚的TOP3
    你懂我说的意思了吧。。

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

常用的引用符号如下:
Shell中傻傻分不清楚的TOP3

  • $

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

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

好了就这么多吧。

条件测试的表达

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

  • 基本语法

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

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

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

  • 字符串测试
    Shell中傻傻分不清楚的TOP3

注重:这里运算符 左右双方又一定要有空格了(下同),这样shell才气将之当成下令执行。

  • 整数测试
    Shell中傻傻分不清楚的TOP3

  • 文件测试
    Shell中傻傻分不清楚的TOP3

逻辑操作符测试

Shell中傻傻分不清楚的TOP3

珍藏在看转发起来,小姐姐就算你条件测试过关了>_<

谢谢大佬这么优异还关注我~

Shell中傻傻分不清楚的TOP3

参考资料:
[1].《Shell从入门到醒目》
[2].https://www.edureka.co/blog/types-of-shells-in-linux/
[3].http://www.penguintutor.com/linux/basic-shell-reference
[4].https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh
[5].https://sunlightmedia.org/bash-vs-zsh/
[6].https://unix.stackexchange.com/questions/439042/debian-read-order-of-bash-session-configuration-files-inconsistent
[7].https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
[8].http://howtolamp.com/articles/difference-between-login-and-non-login-shell/
[9].https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

Shell中傻傻分不清楚的TOP3
同步转动:

Hive的基本介绍以及常用函数

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

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

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

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

Shell的种类
shell程序有sh,bash,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网站拷贝了一段装X剧本:

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才气将之当成下令执行。

整数测试

文件测试

逻辑操作符测试

珍藏在看转发起来,小姐姐就算你条件测试过关了>_<

谢谢大佬这么优异还关注我~

Shell中傻傻分不清楚的TOP3

参考资料:
[1].《Shell从入门到醒目》
[2].https://www.edureka.co/blog/types-of-shells-in-linux/
[3].http://www.penguintutor.com/linux/basic-shell-reference
[4].https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh
[5].https://sunlightmedia.org/bash-vs-zsh/
[6].https://unix.stackexchange.com/questions/439042/debian-read-order-of-bash-session-configuration-files-inconsistent
[7].https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
[8].http://howtolamp.com/articles/difference-between-login-and-non-login-shell/
[9].https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

原创文章,作者:28qn新闻网,如若转载,请注明出处:https://www.28qn.com/archives/14066.html