交互式shell和非交互式shell
交互式模式就是shell等待你的输入, 并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签 退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
登录shell和非登录shell
当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录shell
在Gnome图形界面中打开“终端”出来的那种窗口程序,和登录shell 相比,它是“非登录”的,你并不需要输入用户名和密码。
在登录shell里,只读取/etc/profile和~ /.bash_profile, ~/.bash_login 和 ~/.profile按顺序最先的一个,并执行其中的命令。除非被 --noprofile选项禁止了;
在非登录shell里,只读取 /etc/bash.bashrc和~/.bashrc
输入输出重定向
命令从标准输入读入数据,从标准输出、标准错误输出数据,shell支持对命令的输入、输出进行重定向。
重定向到管道
使用 | 将两个命令连接起来,就实现了将前一个命令的标准输出内容作为后一个命令的标准输入
ls –l | wc –l
以行方式列出当前目录文件,并计算行数,即计算文件数量
重定向到文件
< 将标准输入定向到文件(从文件读入数据)
> 将标准输出定向到文件(如果文件存在,则覆盖原文件)
>> 将标准输出定向到文件,如果文件存在,则将输出内容添加到文件末尾
cat abc.txt >> def.txt
将文件abc.txt的内容合并到def.txt文件
重定向任意文件描述符
对于 Linux 而言,所有对设备和文件的操作都使用文件描述符来进行的。文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,
也需要把文件描述符作为参数传递给相应的函数。
n< 从文件中接受文件描述符n
n> n>> 将文件描述符n定向到文件
主要应用在重定向标准错误
cat dddcat: ddd: 没有那个文件或目录
cat ddd 2> /dev/null
更多重定向方法
command > file1 2> file2分别重定向标准输出和标准错误
command 2>&1将标准错误发送到标准输出同样的位置
command 2>&1 > file将标准错误发送到标准输出同样的位置,然后再重定向到file
command 2>&1 | tee file将命令的标准输出、标准错误都发送到文件file,同时输出到终端
tee命令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。我们可利用tee把管道导入的数据存成文件,甚至一次保存数份文件。
子shell
调用另外一个脚本程序,自动产生一个新的shell环境,如果希望定义并使用一些变量,但不影响当前环境中,可以使用子shell。
格式:( 命令 ) (将要执行的命令用圆括号括起来)
( export LANG=en_US; command )
临时将变量LANG设置成en_US,然后执行命令
source命令
如果希望在本shell的环境中执行一些在脚本文件中定义的文本,可以使用source命令,作为一种简写,也可以写成:. 脚本(注意圆点和脚本名之间的空格)
source config.sh
. config.shconfig.sh中的内容将在本shell环境中执行