[[ $- == *i* ]]了解

解释:环境变量 $- 里若是有字符 i 的话,表明是一个 interactive shell,不然是 non-interactive mode,咱们能够简单测试一下:shell

$> [[ $- == *i* ]] && echo "Interactive" || echo "Not interactive"
Interactive
$>  bash -c '[[ $- == *i* ]] && echo "Interactive" || echo "Not interactive" '
Not interactive

理论基础

        用户登陆到Linux系统后,系统将启动一个用户shell。在这个shell中,可使用shell命令或声明变量,也能够建立并运行 shell脚本程序。运行shell脚本程序时,系统将建立一个子shell。此时,系统中将有两个shell,一个是登陆时系统启动的shell,另外一 个是系统为运行脚本程序建立的shell。当一个脚本程序运行完毕,它的脚本shell将终止,能够返回到执行该脚本以前的shell。从这种意义上来 说,用户能够有许多 shell,每一个shell都是由某个shell(称为父shell)派生的。
       在子 shell中定义的变量只在该子shell内有效。若是在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其余的shell不能引用它,要使某个变量的值能够在其余shell中被改变,可使用export命令对已定义的变量进行输出。 export命令将使系统在建立每个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。      bash

在咱们使用shell的同时,咱们应该清楚shell的一些配置文件的存放位置,按照范围来分,能够分为两种:
(1)全局配置:测试

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

(2)我的配置:spa

~/.bash_profile
~/.bashrc

 咱们能够根据shell是不是交互式和shell是不是登陆式这两个维度,来对shell进行分类code

交互式shell和非交互式shell(interactive shell and non-interactive shell)

 交互式模式就是在终端上执行,shell等待你的输入,而且当即执行你提交的命令。这种模式被称做交互式是由于shell与用户进行交互。这种模式也是大多数用户很是熟悉的:登陆、执行一些命令、退出。当你退出后,shell也终止了。
 shell也能够运行在另一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,而且执行它们。当它读到文件的结尾EOF,shell也就终止了。blog

登陆式shell和非登陆式shell  

登陆shell:是须要用户名、密码登陆后才能进入的shell(或者经过--login”选项生成的shell)。非登陆shell:固然就不须要输入用户名和密码便可打开的Shell,例如:直接命令“bash”就是打开一个新的非登陆shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登陆shell。
执行exit命令,退出一个shell(登陆或非登陆shell);
执行logout命令,退出登陆shell(不能退出非登陆shell)。

ip

相关文章
相关标签/搜索