输入输出
标准输入:默认为键盘,可以指定为文件。
标准输出:默认为屏幕,可以指定为文件。
*****如果在终端输入时,一行不能结束,可以使用反斜杠 \ 在下一行接着输入。
echo
echo用于将字符串输出
1 使用时如果用双引号字符串,内部的$变量将会被替换,内部的反单引号中的命令会输出``,但是转义字符不会发生转义。
2 使用单引号字符串,$变量不会被替换,返单引号不会执行命令,同样不发生转义字符转义。
3 不使用引号等于使用双引号。
echo有三个控制选项:
-n do not output the trailing newline
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)
# 输出后没有换行 echo -n "what‘s your first name: " read first_name # 输出后换行 echo "what‘s your last name: " read last_name # 没有输出tab字符 echo "first name\tlast name" # 输出后有tab字符 echo -e "${first_name}\t${last_name}"
read
read后跟变量名称,会读取输入流,直到换行或者EOF(可以通过Ctrl+d)。
1. 如果变量有多个,那么每次读入的,将会通过空白字符分割赋值给变量。
2. 如果分割的个数多,最后一个变量获得到之后全部的输入。
用法
read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]
cat
用来显示文件内容,控制字符,行号等。
如果没有指定文件,或者文件为"-",则从标准输入读取。
-A, --show-all equivalent to -vET
-b, --number-nonblank number nonempty output lines, overrides -n
-e equivalent to -vE
-E, --show-ends display $ at end of each line
-n, --number number all output lines
-s, --squeeze-blank suppress repeated empty output lines
-t 与-vT 等价
-T, --show-tabs 将跳格字符显示为^I
-u (被忽略)
-v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外
管道pie
管道可以将一个命令的输出传递给另一个命令作为输入。管道用 | 表示。形式为
命令1 | 命令2
如下命令,将文件中的内容读取到变量中去。
cat text.txt | read var
tee
把标准输入,输出到标准输出。同时,也拷贝到相应的文件中去。
[email protected] ~ $ echo abcdefg | tee a.txt abcdefg [email protected]-254LBLA ~ $ cat a.txt abcdefg
***** tee有一个-a选项,表示追加到文件。
重定向
打开shell时,每个进程有三个打开的文件与之关联,分别是:
标准输入:默认是键盘 文件描述符:1
标准输出:默认是屏幕 文件描述符:2
标准错误:默认是屏幕 文件描述符:3
如果有其他文件需要描述符,可以任意使用3-9的数字。
重定向的方式:
- > 重定向标准输出到一个新文件中。
- >> 重定向标准输出,会在文件中追加。
- < 重定向标准输入。
重定向的形式:
- 输出文件描述符 > 文件名
- 输出文件描述符 > &输出文件描述符
- < 输入文件名
- < &输入文件描述符
command > filename |
把标准输出重定向到一个新文件中 |
command >> filename |
把标准输出重定向到一个文件中 (追加) |
command 1 > fielname |
把标准输出重定向到一个文件中 |
command > filename 2>&1 |
把标准输出和标准错误一起重定向到一个文件中 |
command 2 > filename |
把标准错误重定向到一个文件中 |
command 2 >> filename |
把标准输出重定向到一个文件中 (追加) |
command >> filename 2>&1 |
把标准输出和标准错误一起重定向到一个文件中 (追加) |
command < filename >filename2 |
把command命令以filename文件作为标准输入,以filename 2文件 |
作为标准输出 |
|
command < filename |
把command命令以f i l e n a m e文件作为标准输入 |
command << delimiter |
把从标准输入中读入,直至遇到delimiter分界符 |
command <&m |
把文件描述符 m作为标准输入 |
command >&m |
把标准输出重定向到文件描述符 m中 |
command <&- |
把关闭标准输入 |
执行状态
exec
exec用于清除当前shell环境,重新启动一个shell,并执行跟随的命令。命令执行完成之后,shell随之关闭。新shell与原shell具有相同的PID。
如果单纯执行shell script文件,并且文件第一行声明了shell路径,则启动子shell执行其中的命令
如果使用source命令执行shell文件,则在当前shell执行文件中的命令。
后台执行命令
与后台执行命令相关的有:
- &放到命令最后,可以将这行命令立即放到后台执行。为了不干扰,通常会将输出重定向到文件,不让它显示在屏幕。
- nohup命令,其后跟随的命令行在用户退出后仍然后再后台继续运行。
通常使用nohub command & - ctrl+z:将当前执行的命令放到后台,并暂停执行。
- jobs:查看后台执行的命令
- fg %jobnumber:将编号为num的后台命令调到前台执行。
- bg %jobnumber:将任务放到后台去处理
- kill %jobnumber:杀死后台任务